(转)java 层调用Jni(Ndk) 持久化c c++ 对象

对于Jni(Ndk) 很多人应该都有印象,Android的ndk接触到的机会相对会比较多,本例子以android平台为例,pc端的话就以简单的windows为例, 编码完用vs 或是 gcc进行编译成dll文件,扔到系统system32 , 就是环境变量配置的文件夹底下,linux 可能也差不多是这个意思,剩下的代码就跟android一样,进行加载这个动态链接库即可.

 

 

这里就不做赘述,直接进入android平台的ndk开发,这里就主要讲下,Java层如何持久化c c++ 对象,场景可以是这样,假设你在c/c++层创建了一个对象(结构体),你下次还想继续使用怎么办,当然是要保存它了,那要怎么保存,这就要考虑怎么进行持久化它了,翻翻java或是android 很多源代码里面总会对一个long对象进行放置play.

例如:

 

没错,看似没什么特别的一个字段,其实就是底层的一个c/c++对象,比如图片里的mNativeBitmap 其实是c/c++里面的一个Bitmap对象,需要它时会在底层进行转型,可能说起来大家有点不明白  这里我就用代码来说明下.

 

首先新建个 native 类:

 

 

接着用工具生成头文件声明,这个自行百度解决,这里不做赘述,现在来展示下最主要的c/c++代码, 这里我使用c++编码.

 

首先我创建了一个类,c里面就是结构体啦,用c++的语法创建对象就是用new了,那c就是malloc了,这个就不多做说明, 这里比较主要的两段代码时

(jlong)person; 和  (Person *)nativeId;  

这两段代码分别都是转型,一个是转换成jlong(也就是java里的long类型),从java层调用c++层接着返回jlong给java层的一个long对象进行持久化.使用时,在将这个long传到c++层进行强转成Person * , 这样就可以继续使用了. 这是一段很简单的代码, 但是确实很实用 ~

源代码地址:http://download.csdn.net/detail/jue_dui_zhen_li/9570118

 

出自:http://blog.csdn.net/jue_dui_zhen_li/article/details/51852438

posted @ 2017-03-21 09:13  lihaiping  阅读(1921)  评论(0编辑  收藏  举报