有这样一个需求
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; // 强转
这样就方便多了,嘿嘿。