最近由于項目的特殊需求,我們必須在程序調用window的dll。
開始我們用jni,后來由于調用的dll太多,而且很煩瑣。所以,我們決定用開源的jawin調用。
jawin 可以對dll中的方法進行調用,也可以調用com中的方法.內部還提供了一個工具,直接對 com組件導出成 java的類,個人認為很方便。
下面是我們作的一個測試,很順利便通過了。
1、下載jawin:http://jawinproject.sourceforge.net/。
2、配置:
》將jawin.jar放于%JAVA_HOME%\jre\lib\ext下 。
》將jawin.dll放于c:\winnt\system32下。否則將出現錯誤:COMException : no jawin in java.library.path;
也可將jawin.dll放于每個項目目錄下。
》至此在Editplus中調試Jawin/NJawin的例子,可以通過。 而在Eclipse中有時還會出上面的錯誤:COMException : no jawin in java.library.path。
》在Eclipse中,菜單->window->preference->Java->installed JREs 將原來的remove,重新建一個指到你的java sdk目錄。
》 ok了。
3、程序測試:
》調用 dll,dll 的方式不需要導出了,直接調用就可以了,下面是下載的包中提供的一個例子:
》我在win2000下,測試通過。
/*
* Created on Dec 22, 2005
*
*/
import org.jawin.FuncPtr;
import org.jawin.ReturnFlags;
/**
* @author gf mail to gf@163.com
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class GfJawinTest {
public static void main(String[] args) {
try {
FuncPtr msgBox = new FuncPtr("USER32.DLL", "MessageBoxW");
msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_NONE);
} catch (Exception e) {
e.printStackTrace();
}
}
}