我对 JNI 比较陌生,并且已经掌握了使用 JNI 处理 Java 对象中的整数和数组的基础知识。现在我正在尝试修改/访问 Java 对象中的 Java 对象。
我一直在互联网和 Stack Overflow 上搜索,但还没有找到如何做到这一点。
这是示例。
在 Java 中:
public class ObjectOne
{
private byte[] buff;
...
...
}
public class ObjectTwo
{
private ObjectOne obj;
...
...
}
在 JNI 中,如何通过 ObjectTwo 从 ObjectOne 访问“buff”?我尝试过这样的事情......
JNIEXPORT void JNICALL Java_accessBuffThroughObjectTwo(JNIEnv *env, jobject obj, jobject objectTwo)
{
jclass clazz;
jclass bufferClazz;
jobject bufferJObject;
clazz = (*env)->GetObjectClass(env, objectTwo);
fid = (*env)->GetFieldID(env, clazz, "obj", "Ljava/lang/Object;");
bufferJObject = (*env)->GetObjectField(env, javascsicommand, fid);
bufferClazz = (*env)->GetObjectClass(env, bufferJObject); <-- Fails here for Access Violation
fid = (*env)->GetFieldID(env, bufferClazz, "buff", "[B");
}
对我做错了什么有帮助吗?