举例说明JNI如何通过java class参数修改该类中String类型的成员变量,如下所示array为Test类的一个成员变量。
public class Test {
String array;
Test() {
}
}
调用JNI接口对应如下,参数是Test类的一个实例:
public native void setTestArray(Test test);
对应的JNI代码如下:
extern "C"
JNIEXPORT void JNICALL
FUNCTION(setTestArray(JNIEnv *env, jobject instance, jobject test)) {
//获取class
jclass objClass = env->GetObjectClass(test);
//获取array的fieldID
jfieldID arrayID = env->GetFieldID(objClass, "array","Ljava/lang/String;");
char carray[100];
//....
//假设c++代码在这段给carray赋值
//通过carray构造jstring(注意编码问题)
jstring array_ = env->NewStringUTF(carray);
//给Test类的String数组赋值
env->SetObjectField(version, arrayID, array_);
}