博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JNI Java层类关联C/C++层的类
阅读量:6224 次
发布时间:2019-06-21

本文共 1266 字,大约阅读时间需要 4 分钟。

hot3.png

Android开发时,因为要实现某某功能,需要集成算法公司的算法库(so库),这就需要自己编写JNI。

通常这些库提供的接口可以概况成1、初始化    2、算法处理    3、释放    4、打印版本号

初始化后会返回一个指针(句柄),算法处理和释放时都会用到这个指针,所以在初始化后,需要将这个指针返回到Java层保存起来。

public static native long init();public static native boolean deal(long handle);public static native boolean release(long handle);

 

JNIEXPORT jlong JNICALL Java_com_test_Test_init  (JNIEnv *, jobject){    void* handle = xxxInit();    return (jlong)handle;}JNIEXPORT jboolean JNICALL Java_com_test_Test_deal  (JNIEnv *, jobject, jlong jhandle){    void* handle = (void*)jhandle;    xxxDeal(handle);    return true;}JNIEXPORT jboolean JNICALL Java_com_test_Test_release  (JNIEnv *, jobject, jlong jhandle){    void* handle = (void*)jhandle;    xxxRelease(handle);    return true;}

但是如果算法返回的是智能指针,且里面保存的是一个类的指针,则需要改成:

JNIEXPORT jlong JNICALL Java_com_test_Test_init  (JNIEnv *, jobject){    auto handle = xxxInit();    return (jlong)handle.release();}JNIEXPORT jboolean JNICALL Java_com_test_Test_deal  (JNIEnv *, jobject, jlong jhandle){    xxx* handle = (xxx*)jhandle;    handle->Deal();    return true;}JNIEXPORT jboolean JNICALL Java_com_test_Test_release  (JNIEnv *, jobject, jlong jhandle){    void* handle = (void*)jhandle;    delete handle;    return true;}

 

 

 

转载于:https://my.oschina.net/u/1270234/blog/1833491

你可能感兴趣的文章
Hadoop入门(一):Hadoop伪分布安装
查看>>
Tomcat环境配置
查看>>
屌丝程序员的那些事(一)-毕业那年
查看>>
CWidgetMgr---H
查看>>
spring测试实例
查看>>
创建Sdcard
查看>>
两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];...
查看>>
cocos2d-x与ISO内存管理(转)
查看>>
磁盘I/O的性能评估方法
查看>>
计算机排序算法
查看>>
普通IT和文艺IT工程师的区别
查看>>
sql之left join、right join、inner join的区别
查看>>
分贝显示器,实时显示声音强度(附源码)
查看>>
Struts2 高危漏洞修复方案 (S2-016/S2-017)
查看>>
新手必看:如何快速看懂VC++项目
查看>>
使用NativeExtension向AIR app 添加Activity和BroadCastReceiver(2)
查看>>
JavaScript 装饰者模式(this运用)
查看>>
Entity Framework做IN查询
查看>>
架构-缓存
查看>>
多线程的面试题
查看>>