从C#调用我自己的Java代码

 2023-01-21    307  

问题描述

拥有我自己的Java代码,我正在使用C#来调用(通过JNI)呼叫JNI代码的一些非托管代码.我正在使用JNI,因为我需要确保:

  • Java代码可以通过真实JVM而不是通过.NET VM
  • 运行的能力

    从C#调用我自己的Java代码

  • 连接到VM进行调试的能力(IKVM确实不支持它)
  • 我需要免费解决方案
  • 当前的免费解决方案不适用(例如IKVM)

无论如何,我的问题是如何以最佳方式管理这些层之间的字符串,而不会泄漏.
我正在做:

[DllImport(@"MyDll.dll")]
public extern static void receive_message(string receDest, StringBuilder response);

这意味着我正在为托管代码中的响应分配内存.
我想避免这种情况,因为我不知道响应长度.我如何编写适合JNI的方法,该方法将在没有泄漏的情况下为托管代码分配正确的缓冲区. JNI代码应该是安全的.

有什么建议?

谢谢,

Guy

推荐答案

您 May 需要JNI,但您的要求并没有真正表示.

使用真实JVM 的要求不决定使用JNI.我建议提高您的要求,或考虑宽松的耦合.例如,套接字通信,Web服务,共享数据库,共享文件或 queue .

如果您真的需要Java和.net在相同的过程中运行,则使用紧密的耦合,请考虑 jnbridge .
他们解决了您面临的问题.

其他推荐答案

您可能有兴趣尝试使用.net CIL中的Java字节码代码,并使用 ikvm.net .

其他推荐答案

您本质上需要从.NET代码中远程调用Java程序.

使用您当前的技能集,我建议您在Java机器中创建Web服务 – Java 6中相对容易 – 基于WSDL在.NET程序中创建客户端.

这可能是当今技术的最干净的解决方案.

如果出于某种原因不够好,请添加到您的问题中.

以上所述是小编给大家介绍的从C#调用我自己的Java代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26304.html

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

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。