JNI的方(fang)式調用(yong)DLL(SO)(上(shang))
最近有個(ge)項目(mu)要調用原有的(de)DLL文件,本來準備(bei)使(shi)用JNA,可是客戶(hu)不同意,非要使(shi)用JNI的(de)方式。萬(wan)般(ban)無(wu)奈(nai)之下,只能重新(xin)使(shi)用JNI,現將JAVA調用動態鏈接庫(ku)的(de)一(yi)般(ban)方法總結如下。
JNI是(shi)Java Native Interface(JAVA本(ben)地調(diao)用)的(de)縮寫。從Java1.1開始(shi),Java Native Interface(JNI)標準成(cheng)為java平臺(tai)的(de)一部分,它允許Java代碼和其(qi)他語(yu)言(yan)寫的(de)代碼進行交互(hu)。JNI一開始(shi)是(shi)為了(le)(le)本(ben)地已編譯語(yu)言(yan),尤其(qi)是(shi)C和C++而設計的(de),但是(shi)它并不(bu)妨礙你使用其(qi)他語(yu)言(yan),只要(yao)調(diao)用約定受支持就可(ke)以(yi)了(le)(le)。
使用JNI調用DLL文件的步驟(zou)一(yi)般有(you)以下幾步:
1、編寫帶有native聲明的方法的java類
2、使用javac命(ming)令編譯所編寫(xie)的java類
3、使用javah命令編譯成頭文件
4、使用C/C++實現本地方(fang)法(包含第3步生成的頭文(wen)件)
5、將(jiang)C/C++編寫的(de)文件(jian)生成動態連接(jie)庫
下(xia)面將通過實(shi)例詳細介(jie)紹上(shang)面5步的(de)具(ju)體實(shi)現
–> 編寫帶有native聲明的方法的java類,代碼如下:
View Code
1 package com.wanggc.jni; 2 3 public class MyJniNativeMethods { 4 /** 5 * 取最大值。 6 * 7 * @param data1 8 * 數據1 9 * @param data2 10 * 數據2 11 * @return 12 */ 13 public native int getMaxData(int data1, int data2); 14 15 /** 16 * 向某人(ren)問好。 17 * 18 * @param name 19 * 人名(ming) 20 * @return 21 */ 22 public native String getGreeting(String name); 23 24 /** 25 * 加載動態鏈接庫(ku) 26 */ 27 static { 28 System.loadLibrary("testJni"); 29 } 30 31 /** 32 * 入口主(zhu)函數。 33 * 34 * @param args 35 */ 36 public static void main(String[] args) { 37 MyJniNativeMethods jniTest = new MyJniNativeMethods(); 38 // 調用第一(yi)個本地(di)方(fang)法得到兩(liang)個數中的(de)最(zui)大值 39 int maxData = jniTest.getMaxData(100, 150); 40 System.out.println(maxData); 41 42 // 調用第二個本地方法想某人問好 43 String hello = jniTest.getGreeting("王國成"); 44 System.out.println(hello); 45 } 46 }
13行和22行包含(han)了兩(liang)個(ge)本地方(fang)法(fa)(fa),getMaxData和getGreeting,注意本地方(fang)法(fa)(fa)只需(xu)有方(fang)法(fa)(fa)名,不(bu)需(xu)要(yao)方(fang)法(fa)(fa)體。需(xu)要(yao)使用native關(guan)鍵字修飾。27-29行用于加載動態鏈接庫。注意DLL文件不(bu)要(yao)后綴,只要(yao)名稱就可以了。
–> 使用javac命令編譯所編寫的java類,如果是用eclipse編寫(xie)的(de)代碼,不須(xu)使用此命(ming)令,使用project菜單的(de)clean選項編譯一(yi)下(xia)就可(ke)以了(le)。

–> 使用javah命令編譯成頭文件
編譯好class文(wen)件后(hou),打開CMD窗口(kou),轉到bin目錄,運(yun)行
歡迎轉載,請注明出處!
感謝您的閱讀,請關注后續博客!
共享視頻教程請訪問:

