JNI 方法:形式参数列表的长度不同
JNI method: formal argument lists differ in length
我正在尝试修改一个从 java 层获取字符串参数的 JNI 函数。
最初,.java 文件中的 java 代码是:
callJNIMethod();
我正在尝试更改它以便我可以给它一个字符串,如下所示:
String arg = "abcd";
callJNIMethod(arg);
在我的 JNI 代码中,函数以前的样子是这样的:
JNIEXPORT jboolean JNICALL Java_com_file_app_Activity_callJNIMethod(
JNIEnv *env, jclass clazz){
//use the string
}
这是我将其更改为(在包装器 .cpp 文件和 header .h 文件中):
JNIEXPORT jboolean JNICALL Java_com_file_app_Activity_callJNIMethod(
JNIEnv *env, jclass clazz, jstring str);
我收到一条错误消息,指出方法 callJNIMethod 无法应用于给定类型。
required: no arguments
found: java.lang.String
reason: actual and formal argument lists differ in length
Note: Some input files use or override a deprecated API.
知道出了什么问题吗?
您在编辑.h 文件时误入歧途。对本机方法的更改应从您的 Java 来源开始。
.h 文件应该由 javah
从已编译的 .class 文件中生成。您可以将构建系统设置为在每次构建时重新 运行 javah
。这样,如果本机方法实现不再与 Java 源中的本机声明相匹配,您将立即看到。
我正在尝试修改一个从 java 层获取字符串参数的 JNI 函数。
最初,.java 文件中的 java 代码是:
callJNIMethod();
我正在尝试更改它以便我可以给它一个字符串,如下所示:
String arg = "abcd";
callJNIMethod(arg);
在我的 JNI 代码中,函数以前的样子是这样的:
JNIEXPORT jboolean JNICALL Java_com_file_app_Activity_callJNIMethod(
JNIEnv *env, jclass clazz){
//use the string
}
这是我将其更改为(在包装器 .cpp 文件和 header .h 文件中):
JNIEXPORT jboolean JNICALL Java_com_file_app_Activity_callJNIMethod(
JNIEnv *env, jclass clazz, jstring str);
我收到一条错误消息,指出方法 callJNIMethod 无法应用于给定类型。
required: no arguments
found: java.lang.String
reason: actual and formal argument lists differ in length
Note: Some input files use or override a deprecated API.
知道出了什么问题吗?
您在编辑.h 文件时误入歧途。对本机方法的更改应从您的 Java 来源开始。
.h 文件应该由 javah
从已编译的 .class 文件中生成。您可以将构建系统设置为在每次构建时重新 运行 javah
。这样,如果本机方法实现不再与 Java 源中的本机声明相匹配,您将立即看到。