linux java 调用dll_Java调用C#的DLL的坑

本文介绍了Java在Linux环境下如何通过C++调用C#的DLL,详细阐述了调用过程中的关键步骤,包括Java的JNI/JNA、C# DLL的注册为COM组件、版本一致性等。同时,总结了可能出现的问题,如JNI的平台不匹配、DLL找不到等问题,并给出了相应的解决方案。在项目打包成Jar的过程中,也提到了DLL放置位置和加载方式的注意事项。
摘要由CSDN通过智能技术生成

218fd986096d600f7fb092820be9c267.png

感谢@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目录

Java调用C#的DLL的坑 - osc_4ox4jhek的个人空间 - OSCHINA​my.oschina.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值