java利用JNI 呼叫C++(dll)函式完整程式碼示例
阿新 • • 發佈:2021-01-13
JNI是什麼?
JNI(Java Native Interface)意為JAVA本地呼叫,它允許Java程式碼和其他語言寫的程式碼進行互動,簡單的說,一種在Java虛擬機器控制下執行程式碼的標準機制。
第一步:建立好一個類
建立一個Java類,例如JNITest.java,具體程式碼如下:
public class JNITest { static { System.loadLibrary("DwgOperInterface"); } public native String getDllFunction(); public native String transObject(MapController mapController); public static void main(String[] args) { new JNITest().getDllFunction(); } }
注:DwgOperInterface為dll檔案的名稱,建議放在jdk BIN資料夾下
第二步:生成JNITest.h標頭檔案
CMD控制檯,切換到src/main/src資料夾下,輸入生成標頭檔案命令,在該資料夾下生成標頭檔案
javah -classpath . -jni com.hxtx.spacedata.controller.map.JNITest
第三步:用c語言程式碼實現生成標頭檔案裡的介面
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_hxtx_spacedata_controller_map_JNITest */ #ifndef _Included_com_hxtx_spacedata_controller_map_JNITest #define _Included_com_hxtx_spacedata_controller_map_JNITest #ifdef __cplusplus extern "C" { #endif /* * Class: com_hxtx_spacedata_controller_map_JNITest * Method: getDllFunction * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_hxtx_spacedata_controller_map_JNITest_getDllFunction (JNIEnv *, jobject); /* * Class: com_hxtx_spacedata_controller_map_JNITest * Method: transObject * Signature: (Lcom/hxtx/spacedata/controller/map/MapController;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_hxtx_spacedata_controller_map_JNITest_transObject (JNIEnv *, jobject, jobject); #ifdef __cplusplus } #endif #endif
第四步:用c語言程式碼實現生成標頭檔案裡的介面,後的dll檔案替換JDKbin資料夾的dll檔案即可。