我試圖寫在一個實例對象變量上的Java:JNI訪問對象的實例變量
public class Test {
public Test() {
System.load("path_lib");
this.jni_result = 0;
}
public PrintVar() {
JniTest();
System.out.println("jni_result: " + Long.toString(this.jni_result));
}
private native long JniTest();
private long jni_result;
}
在C代碼中,我創建了一個變量
static void
SetErrorVariable(JNIEnv *env, jobject jobj, long error) {
/* Get a reference to jctf object's class */
jclass TestClass = env->GetObjectClass(jobj);
/* Get the Field ID of the instance variables "jni_result" */
jfieldID fidError = env->GetFieldID(TestClass, "jni_result", "J");
/* Change the variable "jni_result" */
jlong jerror = (jlong) error;
env->SetLongField(TestClass, fidError, jerror);
}
JNIEXPORT jlong JNICALL
Java_Test_JniTest(JNIEnv *env, jobject jobj) {
SetErrorVariable(env, jobj, -5)
return (jlong) -5;
}
寫我可以閱讀功能返回JniTest時,我改變了C代碼的返回值,但是我不能改變這個變量,我閱讀了幾個JNI教程,但是我沒有找到其他方法來做到這一點,我在哪裏錯了?
你如何初始化你的'env'? –