現在做的項目中就用到了JNI調用c語言實現的訪問裝置的dll檔案,在此之前對JNI是一竅不通哈,只聽說過JNA連結dll,但只是一個瞭解。
JNI(Java Native Interface)Java本地介面,主要作用是實現java代碼與C C++編寫的代碼互動。
理論不多說,還是看java連結dll具體操作吧。。如下:
以下執行個體為java中調用connection.dll檔案中的 open()方法。
1,java方
1)裝載dll檔案
有兩種方式System.load();和System.loadLibrary();
load需要全路徑且需要有副檔名;
loadLibrary是特定路徑,系統system32下或項目bin目錄下,只要檔案名稱不要.dll副檔名。
2)本地聲明方法
裝載完成dll檔案後,將使用的方法用native關鍵字聲明。
<span style="font-size:18px;">public class ConDll{ static{System.load("d://connection.dll");//或System.loadLibrary("connection"); } public native static void open();}</span>
3)產生.h標頭檔
使用javah ConDll 命令產生.h標頭檔(先使用javac 產生.class檔案)。
#include<stdio.h>#include<ConDll.h>JNIEXPORT void JNICALL JAVA_ConDll_open(JNIEnv *env,jobject obj);
產生的標頭檔中方法命名為java類的完整路徑和方法,中間用底線隔開。
注意:如果項目中調用現成的dll檔案,我們必須知道C中方法的聲明,並在java程式中建立對應的包結構,如果路徑不對應,運行java程式時就會報錯,親身教訓呀。(我做的項目調整了一下包名,dll檔案沒有重新編譯)。
2,C方
根據產生的.h標頭檔,實現所有的方法。
一般項目中dll檔案都是先有的,在java中調用時一定要確保java類的包路徑和類名,要與dll對應的方法全名路徑一致。