【JNI】Java中如何管理native C++的指针

有这样一个需求

Java中有两个函数:

native void initJNI();
native int getValue();

第一个函数负责调用C++初始化一些变量,初始化一个做加法的类,第二个函数负责用这些变量来处理的到结果,那第二个函数进去以后怎么找到之前构建好的那个类呢?

class Plus{
    int plus(int a,int b){
        return a+b
    }
}

解决方案

这个类似于Java中的聚类关系,只要把C++中构建的类的引用传给Java就可以了。

引用本质上也是一个指针。按照指针的地址,找到对应的位置。

把C++中的一个对象的地址传给java。

return (jlong)plusObject; // 强转

因为C++中的堆内存是要手动释放的,所以,函数返回以后,变量仍然还在。

再次使用的时候,在Java中把这个指针的地址传递给C++

native int getValue(long plusObjectAddress);

在C++中得到这个地址后,就可以构建出来了:

Plus* plus=(Plus*)plusObjectAddress; // 强转

这样就方便多了,嘿嘿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值