gpt4 book ai didi

java - 从 C++ JNI 获取 Java 类中的实例变量

转载 作者:行者123 更新时间:2023-11-30 04:13:23 26 4
gpt4 key购买 nike

美好的一天,抱歉,我只是 JNI 的菜鸟,所以如果这是一个相当愚蠢的问题,请耐心等待 :D 现在要使用 JNI 从 C++ 调用 Java 类中的方法,您可以这样做:

Java 类:

public int getCount() {     
return mCount;
}

JNI:

JNIEXPORT void JNICALL
Java_com_example_init(JNIEnv* env, jobject obj, jint number)
{
...
jclass Class = env->GetObjectClass(obj);
jmethodID getCountMethodID = env->GetMethodID(Class,
"getCount", "()I");
if (getCountMethodID == 0)
{
LOG("Function getCount() not found.");
return;
}
Count = env->CallIntMethod(obj, getCountMethodID);
...
}

但是如何直接从 java 类中获取实例变量呢?似乎找不到这方面的例子。还是非常简单?

最佳答案

您可以引用 JNI 文档了解更多详细信息 http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp16536 .

使用以下方法从 jclass 中获取所需实例变量的 jfieldID

jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);

获得 jfieldID 后,您可以使用以下方法访问对象实例变量。但是您需要预先知道要访问的字段类型。

NativeType Get<type>Field(JNIEnv *env, jobject obj,
jfieldID fieldID);

关于java - 从 C++ JNI 获取 Java 类中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com