日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java通过JNA访问DLL

發布時間:2024/1/18 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java通过JNA访问DLL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Idea搭建springboot項目,通過JNA訪問DLL

  • 易錯點
  • 步驟

易錯點

  • dll和jdk版本(32位、64位)
  • dll的加載路徑(找不到指定模塊)
  • dll的格式(不是有效的win32程序)
  • 步驟

  • 下載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

  • 加載dll
    編寫接口類和方法,然后調用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報錯-不是有效的win32程序
    該錯誤是由于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設置
  • ![在這里插入圖片描述](https://img-blog.csdnimg.cn/e4f4db6a852248d58151810dbd1b5e9c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2FjdHVzODg=,size_20,color_FFFFFF,t_70,g_se,x_16)

    總結

    以上是生活随笔為你收集整理的java通过JNA访问DLL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。