java通过JNA访问DLL
生活随笔
收集整理的這篇文章主要介紹了
java通过JNA访问DLL
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Idea搭建springboot項目,通過JNA訪問DLL
- 易錯點
- 步驟
易錯點
步驟
下載jna包,存放在項目的一個自定義目錄下,如lib
同時下載jna-platform-5.9.0.jar,如果不下載該包,開發時沒問題,但打包時會出現“程序包com.sun.jna不存在”,我的項目是這樣@
設置該目錄為Library目錄
存放dll
我使用JNA遇到的第一個錯誤就是“找不到指定的模塊”,這個錯誤就和dll的存放有關。dll的存放有多種方式,我測試了兩種:
(1)將存放dll的目錄設置為resource
這樣,在build的時候,dll就會被打包到target/classes目錄,而該目錄是jna加載dll的默認路徑之一。
(2)通過jna.library.path指定dll路徑
這種方式可以把dll存放在任意位置,然后在jna加載前,通過System.setProperty()指定dll的路徑。如:把dll存在在d:\tmp目錄
System.setProperty(“jna.library.path”, “d:/tmp”);
或者通過VM參數設置-Djna.library.path=“d:/tmp”
打包后,通過java -jar運行時,在-jar前增加vm參數
java -D"jna.library.path"=“d:\tmp” -jar ***.jar
編寫接口類和方法,然后調用Native.load加載dll,示例:
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.load(“dll2”, CLibrary.class);
int test();
}
在需要使用dll的地方:
System.setProperty(“jna.library.path”, “d:/tmp”);
CLibrary instance = CLibrary.INSTANCE;
instance.test();
該錯誤是由于dll和jdk的版本不一致,dll是32位而Jdk是64位,或者dll是64位而jdk是32位。解決辦法就是讓二者版本一致,重新編譯dll,或者安裝相應版本的jdk。
該錯誤可能是接口中的方法和dll中的方法寫的不一致,按照dll的方法原型修改正確即可。還有一種可能,是dll中的方法沒有用extern "c"修飾,添加上即可。
需要把Jna包打入jar包,否則運行時會出現java.lang.NoClassDefFoundError錯誤。為此需修改Pom.xml,加入依賴,修改build設置
總結
以上是生活随笔為你收集整理的java通过JNA访问DLL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机毕业设计Node.js+Vue理想
- 下一篇: Nautilus Chain测试网迎阶段