(轉)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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM