有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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) 个答案

  1. # 1 楼答案

    根据documentation,您应该为DestroyJavaVM函数提供一个类型为JavaVM *vm的参数:

    jint DestroyJavaVM(JavaVM *vm);
    

    因此,用DestroyJavaVM(jvm)替换jvm->DestroyJavaVM()

    注意,在同一页上,有一个“概述”,其中在代码中调用了{{*CD5>}(^ {< CD3>}),但这适用于C++,并且您提到了您试图从C.</P>调用java代码。