使用JNI从C调用Java
我尝试用下面的代码从C代码中调用Java函数performSHA()。但我不断收到一个错误,上面写着“在非结构或联合中请求成员'DestroyJavaVM'。我已经在网上查看了几个链接,似乎我正在使用上面提到的链接
JavaVM *jvm;
JNIEnv *env;
JavaVMOption options[3];
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
options[0].optionString = "/home/amy/jni/";
vm_args.options = options;
JNI_CreateJavaVM(&jvm, &env, &vm_args);
jclass cls = (*env)->FindClass(env, "CallToBCLib");
jmethodID mid = (*env)->GetStaticMethodID(env, cls, "performSHA", "ILjava/lang/String;");
(*env)->CallStaticVoidMethod(cls, mid, algo_id, tc->m1);
jvm->DestroyJavaVM(); <-- ERROR
FindClass、GetStaticMethodID和CallStaticVoidMethod的使用是否正确?performSHA是我正在调用的Java函数,algo_id,tc->;m1是Java函数的参数
# 1 楼答案
根据documentation,您应该为
DestroyJavaVM
函数提供一个类型为JavaVM *vm
的参数:因此,用
DestroyJavaVM(jvm)
替换jvm->DestroyJavaVM()
注意,在同一页上,有一个“概述”,其中在代码中调用了{{*CD5>}(^ {< CD3>}),但这适用于C++,并且您提到了您试图从C.</P>调用java代码。