1. 程式人生 > 程式設計 >Java通過JNI 呼叫動態連結庫DLL操作

Java通過JNI 呼叫動態連結庫DLL操作

JNI(Java Native Interface)Java本地介面,主要作用是實現java程式碼與C、C++編寫的程式碼互動。

在Android程式設計中,so庫的訪問也用到了jni技術。

理論多說無益,還是看java連線dll的實戰吧。如下:

例:java中呼叫demo.dll檔案中的 hello()方法。

1、java

1)裝載dll檔案

有兩種方式System.load();和System.loadLibrary();

load需要全路徑且需要有副檔名;

loadLibrary是特定路徑,系統system32下或專案bin目錄下,只要檔名稱不要.dll副檔名。

2)本地宣告方法

裝載完dll檔案後,將使用的方法用native關鍵字宣告。

public class ConnectDemoDll{
 static{
  System.load("c://demo.dll");
  //或者
  //System.loadLibrary("demo");
 }
 public native static void hello();
}

3)生成.h標頭檔案

首先使用javac ConnectDemoDll.java生成.class檔案,再使用javah ConnectDemoDll命令生成.h標頭檔案

#include<stdio.h> 
#include<ConnectDemoDll.h> 
JNIEXPORT void JNICALL JAVA_ConnectDemoDll_hello(JNIEnv *env,jobject obj);

生成的標頭檔案中方法命名為:java類的完整路徑_方法(中間下劃線分割)

注意:如果專案中呼叫現成的dll檔案,我們必須知道C中方法的宣告,並在java程式中建立對應的包結構,如果路徑不對應,執行java程式時就會報錯。當包名調整了之後,請重新編譯對應的dll檔案。

2、C

根據生成的.h標頭檔案,實現所有的方法即可。

注:

一般專案中dll檔案都是本來就有的,說白了就是一開始就有編譯好了的dll檔案,在java中呼叫時一定要確保java類的包路徑和類名,要與dll對應的方法全名路徑一致,否則會出錯。

補充知識:jni操作中java呼叫dll檔案部署失效問題

vs釋出dll版本時,沒有選擇release版本,而是用的debug版本,導致可能找不到需要依賴的dll

<audio controls="controls" style="display: none;"></audio>

以上這篇Java通過JNI 呼叫動態連結庫DLL操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。