我正在编写一个与getter()
调用有很多关系的应用程序,每次我必须执行JNI
调用来访问变量值。相反,可以在Java Layer上访问obj.name
对象的对象引用,因此可以仅通过变量名称获取更新的变量值(例如obj.getName()
而不是private native CustomObj getCPPCustomObjectPointer();
)。
我已经检查了this和this,但没有办法在java层上将地址转换为Object。
修改 我想在JNI的Java层以这种方式访问Obj。
temp
这里有任何建议。
答案 0 :(得分:1)
是否可以在Java Layer上访问JNI对象的Object引用?
是的,你可以。但是,您无法使用它来访问其属性。您只能将其地址保留为long
值。
如果您愿意,您应该在堆内存中创建C ++对象,并将其地址作为long
个数字返回。
MyClass *obj = new MyClass();
return (long) obj;
在Java端,您可以将该地址另存为long
个号码。由于已在堆内存中创建了对象,因此它们在JNI调用之间保持有效。
此外,您必须将它们作为long
号码传递给以后的JNI调用,然后您应该将它们转换为C ++端的MyClass *
。
MyClass *obj = (MyClass *)thatLongNumber;
obj->someProperty; // Access its properties and methods via -> operator
答案 1 :(得分:0)
您想要从Java 端保留对
用于表示和访问对象/原语的那些实现(C / Java)是完全不同的。 这就是为什么当你从一种数据类型转换到另一种数据类型时,有mambo jambo functions这么多的原因。