访问JNI对象到Java层作为引用指针
Access JNI Object to Java layer as reference pointer
我正在编写一个应用程序,其中我与JNI
调用有很多关系,每次我都必须执行getter()
调用来访问变量值。相反,可以访问对象引用的JNI
对象在Java层,所以可以得到更新的变量值只是通过变量名称(如obj.name
而不是obj.getName()
)。
我已经检查了这个和这个,但不知道如何在java层将地址转换为对象。
编辑我想用这种方式从JNI在Java层访问Obj。
private native CustomObj getCPPCustomObjectPointer();
有什么建议吗
是否有可能在Java层上访问JNI对象的对象引用?
是的,你可以。但是你不能用它来访问它的属性。您只能将其地址保存为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
您想从Java端保留对c++ 对象的引用 ?你不能。
那些表示和访问对象/原语的实现(C/Java)是完全不同的。这就是为什么当你从一种数据类型转换到另一种数据类型时,会有那么多乱七八糟的函数。相关文章:
- C++取消引用指针.为什么会发生变化
- 深层复制具有自引用指针的类
- Visual c ++,使用字符串引用/指针调用 dll 函数
- std::unordered_map::提取引用/指针失效
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 如何在 c++ 中使用带有数学运算的引用/指针?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何获取指向类(而不是对象)的引用/指针
- 将类型参数传递给自引用指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 在析构函数内取消引用指针时出现分段错误
- 来自引用指针的内存泄漏
- 引用指针后面的值
- 无法取消引用指针
- 引用指针调用成员函数
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 取消引用指针以创建数组的副本
- 有关启动引用指针的引用的问题