感謝@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目錄