浪味儿仙 2023-09-22 10:47 采纳率: 20%
浏览 8
已结题

C#.net 怎么调用java生成的dll(间接引用C++的dll)

我要创建一个C# web项目(直接按web模板创建的,没有任何功能页面的测试项目), 去调用一个用java编写生成的dll (使用ikvm8.7 生成的dll, 以下简称A.dll), , 但是, 这个java的dll会加载引用一个C++编写生成的dll(以下简称B.dll) . java编写的A程序中(在java环境下), 是成功调用了B.dll的方法的 ; 之后在C#项目中, 引用了 A.dll , 以及前文提到的ikvm8.7中的\bin下的IKVM.OpenJDK.Core.dll 、IKVM.Runtime.dll、IKVM.Runtime.JNI.dll ,用一个测试按钮去调用A.dll的方法(该方法会去加载实例化B.dll, 采用的是加载同级目录下的B.dll文件方法), 然后看是否返回有值判断成功与否, 但是报错如下 :

img

在页面上用LAbel去返回C#在调用A.dll时 , A.dll加载B.dll的文件路径 , 结果如下 : 第一个是在java的程序里写加载同级目录, 所获取的目录 , 第二个就是在java程序里写死的本地文件路径

img

后来, 我想在C#中引用B.dll , 但是报错 :

img

像这种直接和间接引用不同语言生成的dll , 应该如何处理 ? 思路是什么 ?
另外, 我在测试过程中, 还遇到如下疑问 :

  1. 因为B.dll 是32位的(无法重新改写它) , 因此java在编写的时候为了适配, 也用了32位(JDK8, ikvm8.7) , 我在C#中用.net framework3.5, x86(同时将windows的IIS应用池也开启32位) , 但是整个C#项目报错引用dll版本不一致, A.dll的运行版本在v4.0.30319 , ikvm系列的运行版本在v2.0.50727 , .net 3.5系列也是在v2.0.50727 , 后来我换成.net 4.0(v4.0.30319)之后就可以了(ikvm系列的运行版本还是在v2.0.50727) , 但是以后真正要调用A.dll的项目是用.net3.5框架, 这种情况要如何处置啊 ?
    (我才接触C#没几天, 所有知识东拼西凑的, 还望各位讲解详细一些, 多谢多谢 !!)
  • 写回答

3条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2023-09-22 11:18
    关注

    java能写dll?
    Java 本身不能直接编写 DLL(动态链接库),但可以通过 Java Native Interface (JNI) 技术在 Java 代码中调用 C/C++ 编写的动态链接库。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月7日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测