天天看點

java 調用c++類庫_java調用c++庫的項目執行個體

java調用c++庫的項目執行個體

通常java調用c++的庫檔案使用java的jni技術,但是由于sdk需要調用的功能點比較多,jni的技術步驟繁多,工作量比較大,通過網上收集的資料有更好的方式來完成,即jna技術。

JNA可以讓你像調用一般java方法一樣直接調用本地方法。就和直接執行本地方法差不多,而且調用本地方法還不用額外的其他處理或者配置什麼的,也不需要多餘的引用或者編碼,使用很友善。

JNA類庫使用一個很小的本地類庫動态的調用本地代碼。隻需要使用一個特定的java接口描述一下将要調用的本地代碼的方法的結構和一些基本屬性。這樣就省了為了适配多個平台而大量的配置和編譯代碼。因為調用的都是JNA提供的公用jar包中的接口。

具體過程為,jna官網下載下傳 https://jna.java.net/ 下載下傳jar包,最新版本為4.1.9,見下圖

(所有圖檔見附件)

将這兩個jar包加入工程中。

可以下載下傳一個工具,它可以根據c頭檔案生成可以直接java調用的類,改工具名稱為JNAerator-master,下載下傳源碼編譯後可得到一個圖形化的頁面,打開該工具的方式為:

打開後的界面如下:

界面左邊為h頭檔案,右邊為c語言結構體生成的對應的java類,也可以将c語言方法對應的生成java語言的接口。将生産的java源代碼放入到工程中就可以先用的調用c語言提供的功能了。在本項目中

HCNetSDK.sh為頭檔案生成的結構體對應的java及各個c函數在HCNetSDKLibrary.java裡面。比如頭檔案裡面的函數

對應生成java裡面的方法:

相應的結構體也生成了java的類

到此為止c++的調用,就完全轉換成java的調用了,很簡單吧。

另外在傳遞參數的時候,java于c對應的基本類型有對應關系,相應的參數需要對應下:

特别是c裡面無符号整數,在java裡面是沒有相應的的對應的,要麼java語言做下轉換,要麼在定義c++接口的時候盡量使用long long型參數。

下面将無符号整數轉換的函數列出:

其他主要注意的事項是,如果java為32位的版本,相應的c庫檔案也要32位的,64位的java對應c庫64位的。在指定庫檔案位置時,可以設定java系統參數,解決找不到庫檔案的異常: