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

下面是按着这篇教程一步步来所遇到的坑以及事后的总结:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  :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啥啥啥类似

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄