java-native-interface - jni 传递类对象作为参数

标签 java-native-interface android-ndk

我的类有另一个类的对象。当我通过 jobject 将该对象传递给我的 jni 函数时,getFieldID 表示找不到该字段。变量名绝对正确

jfieldID fidPopulation = (*env)->GetFieldID(env,cls,"mPopulation","I");

最佳答案

在此函数中,您试图访问一个名为 mPopulation 的整数类型字段。从您的问题看来,您正在尝试访问一个对象字段。 “I”表示它是一个整数。如果你想得到一些对象,你应该给它的路径一些类似“org/abc/MyClass”的东西
我正在根据下面的评论添加一些代码。
objectA是JVM传过来的,是调用这个函数的对象。 objectB 是一个参数,是类 org/demopath/ClassB.java 的对象,从 java 传递给测试函数。

    Java_MyTestFunction( JNIEnv *env, jobject objectA, jobject objectB) {  
        jclass cls = (*env)->FindClass(env, "org/demopath/ClassB");  
        jfieldID fid = (*env)->GetFieldID(env, cls, "mPopulation ", "I");  
        jint population = (*env)->GetIntField(env, objectB, fid);  
    }      

签名是我手写的,所以可能会有一些错误。始终使用生成的签名

关于java-native-interface - jni 传递类对象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812787/

相关文章:

java - 如何将cpp回调函数指针发送给java

Android NDK 构建 .so 但 Unresolved inclusion 所有包含

android - Selenium 可以在 Android 设备上直接运行(无需 adb)吗?

java - 如何正确地将共享库加载到 Eclipse 中

c++ - 将 long int 转换为结构指针

java - jfieldID 和 jmethodID 是否绑定(bind)到特定类,或者我可以在子类对象上使用它们吗?

Android加载库错误——无法映射段

Android New Build System, Experimental Plugin, JNI Library Module

c++ - stringstream << 运算符在循环中消耗大量内存

java - AtomicInteger 是基于JNI 实现的吗?