JNI java調用動態連結程式庫dll

來源:互聯網
上載者:User

    現在做的項目中就用到了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對應的方法全名路徑一致。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.