(轉)java 層調用Jni(Ndk) 持久化c c++ 對象

來源:互聯網
上載者:User

標籤:欄位   相對   system   base   text   ace   平台   環境   連結   

對於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

(轉)java 層調用Jni(Ndk) 持久化c c++ 對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.