1、JNative
JNative調用dll很方便,只是需要dll有導出函數,否則調不到。就是說要調用的方法必須是導出函數。如果不知道你的dll有沒有這個導出函數,可下載這個軟件查看——DLL函數查看器。
下載JNative開源項目(百度之),解壓開,拿到三個文件,分別是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。
——JNativeCpp.dll Windows下用的,拷貝到c:/windows / system32目錄下
如果不行,可能是64b系統,在c:/windows /SysWOW64文件夾下面再放一個
——libJNativeCpp.so Linux下的,拷貝到系統目錄下;
——JNative.jar 這是一個擴展包,導入工程LIB中或將其拷貝到jdk\jre\lib\ext 下,系統會自動加載。
例子:使用JNative組件調用一個測試應用服務器狀態的TestABC.dll文件,Dll文件中包含一個TestMain(String ip,int port)方法,返回一個整形的結果(1或0)
public static void main(String[] args) {
System.loadLibrary("TestABC");
JNative n = null;
try {
n = new JNative("TestABC", "TestMain");
// n.setRetVal(Type.STRING);
int i = 0;
n.setParameter(i++, Type.STRING, "192.168.1.108");
n.setParameter(i++, Type.INT, "" + 1000);
n.invoke();
return Integer.parseInt(n.getRetVal());
} catch (NativeException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Jacob調用COM組件,如果dll文件可以註冊爲COM組件,可以使用Jacob方式調用,很好用,而且不需要導出函數。
Jacob下載:點擊打開鏈接
例子:
第一步,註冊組件,註冊方式爲 開始——運行——輸入命令cmd——輸入命令regsvr32——空格——拖入要註冊的dll文件——回車
顯示成功,則註冊完成。
第二步,去註冊表中把你註冊com組件找到,一般命名方式是“dll名字+ . +後綴”,可以根據dll的名字找,這是獲取此com組件的關鍵,同時進一步判斷你註冊成功了。
第三步,寫代碼調用
ActiveXComponent axc = new ActiveXComponent("testcom.Test");//獲取對象
Dispatch dis = axc.getObject();
String str ="";//初始化
Variant v1 = new Variant(str,true);//輸出參數定義,必須這樣,否則得不到輸出參數的值
Variant v2=new Variant();//返回值定義
v2 = Dispatch.call(dis, "getFace", "100",200,v1);
System.out.println("輸出參數值:"+v1);
System.out.println("返回值:"+v2);
代碼解釋:調用方法時,注意此處有Java中沒有的概念,叫做輸出參數,用於返回值不夠時的傳值。輸出參數的定義如上,一般參數定義與Java相同,直接傳輸即可。
忘了說最初,需要把jacob解壓開,獲取裏面的dll文件,放到c:/windows
/ system32目錄,建議64b的系統再放一份到c:/windows
/SysWOW64文件夾下。裏面的jacob.jar就不用多說了吧,放到項目裏導入就行啦。