1. 程式人生 > 其它 >java利用JNI 呼叫C++(dll)函式完整程式碼示例

java利用JNI 呼叫C++(dll)函式完整程式碼示例

技術標籤:技術交流jnijavac++

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檔案即可。