Java調用C#的DLL的坑


感謝@stagebo的這篇 https://www.cnblogs.com/wyongbo/p/jnaTest.html

下面是按着這篇教程一步步來所遇到的坑以及事后的總結:

  :Java不能直接調C#,解決辦法是通過C++調用C#,流程: Java的JNI/JNA --> C++的DLL --> C#的DLL

  :C#的DLL需要注冊為COM組件,參考https://www.cnblogs.com/huangmianwu/p/6145044.html

  :C++和C#的DLL的目標框架(.NET)要設置相同的版本

  :C++的DLL文件位置看你怎么加載,C#的DLL就放到JRE的bin目錄下

  :Jre、C++、C#目標平台要一致,比如都用x64

  :Java、C++一些基本數據類型是不一樣的,可以百度JNA或JNI數據類型

=========================================================================

可能出現的問題和解決方案:(注:以下問題全腦子里擠出來的,可能不清楚望多多理解)

  1、如果用JNI的話,有個platform啥啥啥的那就是JRE和DLL版本不對,如果是unsatisfied啥啥啥的說明調用不到DLL的導出函數或者出錯,檢查JAVA的接口和DLL的代碼,還有DLL位置

  2、如果是JNA的話,最好使用4.X及以上的版本,否則可能出現Java虛擬機直接Fatal Error,如果出現了Invalid memory access,那就和JNI的unsatisfied啥啥啥類似

 =========================================================================

再來補一下 前面的項目 關於 打包成 Jar 遇到的坑:

  1、將C++和C#的DLL丟進resources文件夾中才能打包

  2、調用DLL時通過getResourceAsStream來獲取Jar中的DLL文件,將C++DLL拷出來再調用,然后將C#DLL拷進JDK或JRE的bin目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM