在android中通过jni在c中调用Main
Calling the Main in c by jni in android
我想调用main:
int main(int argc, char *argv[])
我试过这个链接:如何使用JNI调用"main"函数需要一个字符指针数组?
JNIEXPORT jint JNICALL Java_package_Class_lameMain(JNIEnv *env, jclass class, jobjectArray jargv)
{ //jargv is a Java array of Java strings
int argc = env->GetArrayLength(jargv);
typedef char *pchar;
pchar *argv = new pchar[argc];
int i;
for(i=0; i<argc; i++)
{
jstring js = env->GetObjectArrayElement(jargv, i); //A Java string
const char *pjc = env->GetStringUTFChars(js); //A pointer to a Java-managed char buffer
size_t jslen = strlen(pjc);
argv[i] = new char[jslen+1]; //Extra char for the terminating null
strcpy(argv[i], pjc); //Copy to *our* buffer. We could omit that, but IMHO this is cleaner. Also, const correctness.
env->ReleaseStringUTFChars(js, pjc);
}
//Call main
main(argc, argv);
//Now free the array
for(i=0;i<argc;i++)
delete [] argv[i];
delete [] argv;
}
但是它不起作用,因为我是用C而不是c++编程的。在我做了一些改变之后,有一个问题在"GetArrayLength"这个错误:
error: request for member 'GetArrayLength' in something not a structure or union
我也试过这个链接:如何在Android中通过JNI调用C文件中的main函数?
JNIEXPORT return_type JNICALL Java_full_package_name_classname_functionname(JNIEnv *env, jobject object, Jobject stringArray){
// your argc
int size = env->GetArrayLength(stringArray);
char **argv = new char*[size];
for (int i=0; i < size; ++i)
{
jstring string = env->GetObjectArrayElement(stringArrays, i);
const char* cString = env->GetStringUTFChars(string, 0);
argv[i] = strdup(cString);
env->ReleaseStringUTFChars(string, myarray);
env->DeleteLocalRef(string);
}
// you will need to modify main so it does properly cleanup
main(argc, argv);
// clean up
for(int i = 0; i < size; ++i)
free(argv[i]);
delete [] argv;
}
错误是:Java_package_Class_lameMain之前预期的';'或','
对你的函数这样做:
JNIEXPORT void JNICALL Java_ClassName_MethodName
(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);
(*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}
问题是使用*env
参见此处的C-examplehttp://en.wikipedia.org/wiki/Java_Native_Interface
相关文章:
- 当我尝试在 Main 中调用插入函数时,它不是取数字?
- 未声明的标识符和类型"int"从 main 调用类时出现意外错误
- 如何使 WaitForSingleObject 在从 main 调用的线程内接收信号作为类成员函数
- C++尝试从main调用函数
- 如何用相同的签名从main调用基类函数
- C++ 如何从 main 调用派生的基类函数
- 读取函数由 main 调用,但不执行
- 如果方法私有,是否可以从 main 调用该方法?如果不是,怎么可能
- 使用类通过main调用函数
- 如果没有返回,如何向main调用void函数
- 在C++中从Main调用函数
- C++ 从实现文件中的 main 调用函数
- 从main调用c++源文件中的函数
- 如何在另一个包含对象的文件中创建一个函数并从 main 调用它
- 是否可以从常规main调用WinMain ?
- c++:从main()调用模板化函数
- 从c++中的main调用类中的结构体
- 在类中从main调用函数
- 未在作用域内声明的c++类——从main调用
- 如何编写函数并从main调用它们