作为引用指针访问JNI对象到Java层

 2023-01-20    254  

问题描述

我正在编写一个应用程序,其中我与JNI呼叫有关,并且每次必须执行getter()访问访问变量值的时间.相反,可以在Java层上访问JNI对象的对象参考,因此只能通过变量名来获得更新的变量值(例如obj.name而不是obj.name而不是obj.getName()).

我有 this 和很多2624806″> this ,但没有得到如何掩盖Java层的对象的路.

作为引用指针访问JNI对象到Java层

编辑
我想从JNI的Java层以这种方式访问​​OBJ.

private native CustomObj getCPPCustomObjectPointer();

这里的任何建议.

推荐答案

是否可以访问JAVA层上JNI对象的对象引用?

是的,你可以.但是,您不能将其用于访问其属性.您只能将其地址作为long值保存.

如果您想这样做,则应在堆内存中创建C ++对象,并以long数字返回其地址.

MyClass *obj = new MyClass();
return (long) obj;

在Java侧,您可以在任何地方将该地址保存为long号码.由于对象是在堆内存中创建的,因此它们在JNI调用之间将保持有效.

另外,您必须将它们传递给以后的jni呼叫long号码,然后您应该在C ++方面将它们施加到MyClass *.

MyClass *obj = (MyClass *)thatLongNumber;
obj->someProperty; // Access its properties and methods via -> operator

其他推荐答案

您想从Java side保留对C ++ 对象的参考? 你不能.

用于表示和访问对象/原始的那些实现(C/Java)完全不同.
这就是为什么有这么多 mambo Jambo函数当您从一种数据类型到另一种数据类型时.

以上所述是小编给大家介绍的作为引用指针访问JNI对象到Java层,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26071.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。