如果我尝试从 JNI 将 jstrings 传递给 jobjectArray 中的 Java,我就会出错。我对此进行了多次研究,它应该有效。但是我的签名 [Ljava/lang/String 不起作用。当我什么都不通过时,它就起作用了。当我返回 jobjectArray 时,它也有效。当我尝试将数组发送到 Java 方法时发生错误。所以我认为 Sinature 不起作用。我希望有人可以帮助我,这样对其他人来说也会更容易。我会发送我的小程序来证明我的错误。
这是 C 代码:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include "clas.h"
JNIEXPORT void JNICALL Java_clas_function(JNIEnv *env, jobject jobj, jobjectArray in_array){
jclass icls = (*env)->GetObjectClass(env, jobj);
jmethodID jmid = (*env)->GetMethodID(env, icls, "callback", "([Ljava/lang/String)V");
if(jmid == 0){
printf("False Signature\n");
exit(-1);
}
(*env)->CallVoidMethod(env, jobj, jmid, in_array);
}
Java 代码:
public class clas {
public clas(){
String[] c = {"something", "something else", "another one"};
function(c);
}
public native void function(String[] in_strg);
public static void main(String[] args){
clas c = new clas();
}
private void callback(String[] in_string){
System.out.println("reached");
}
static {
System.loadLibrary("clas");
}
}
谢谢 ;).
String对象的签名是Ljava/lang/String;
,不是Ljava/lang/String
。
我是一名优秀的程序员,十分优秀!