JNI将类对象作为参数传递

3

我有一个类,其中包含另一个类的对象。当我通过jobject将该对象传递给我的jni函数时,getFieldID显示找不到该字段。变量名肯定是正确的。

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

你有没有任何关于这个是否能工作的更新? - bobby
出现了类未找到异常。如果B类与A类不在同一个包中,这会有影响吗? - VBK
你应该使用类的完整包名路径调用findClass。A和B所在的包并不重要。 - bobby
那么com.test.callactivity会变成com/test/callactivity,对吗? - VBK
1个回答

0
在这个函数中,您正在尝试访问一个名为mPopulation的整数类型字段。从您的问题来看,您似乎正在尝试访问一个对象字段。 "I"表示它是一个整数。如果您想获取某个对象,应该给出其路径,例如"org/abc/MyClass"
根据下面的评论,我添加了一些代码。
objectA由JVM传递,并且是调用此函数的对象。objectB是一个参数,是类org/demopath/ClassB.java的对象,并从Java传递给test函数。
    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);  
    }      

我手动编写了签名,因此可能会有一些错误。请始终使用生成的签名。


抱歉造成混淆。让我解释一下我想做什么。我有一个类 A,它包含一个类 B 的对象,该对象具有一个成员 mPopulation 和其他一些我想从 jni 访问的成员。jni 函数是从类 A 调用的。我该怎么做才能在 jni 中访问类 B 的对象及其相应的成员? - VBK
由于您正在从A对象调用JNI,请使用该对象作为函数签名中的第二个参数。如我所说,从类A中获取对象b的fieldID。使用它来获取对B对象的引用。然后使用它来获取B中的字段。请参阅http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html。 - bobby
即使对象B在对象A的函数中声明,这是否仍然有效? - VBK
不,你必须将该对象作为函数参数传递给JNI。这样会更容易。 - bobby
你能提供一些代码吗?我不确定如何获取对象部分的字段ID。 - VBK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接