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

Guy*_*Guy 2 c# c++ java string java-native-interface

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

  • Java代码在真实JVM上运行而不是在某些.NET VM上运行的能力
  • 能够连接到VM进行调试(IKVM不支持)
  • 我需要免费解决方案
  • 目前的免费解决方案不适用(例如IKVM)

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

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

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

有什么建议?

谢谢,

家伙

Che*_*eso 6

可能需要JNI,但您的要求并未真正表明它.

使用真正的JVM的要求并没有规定使用JNI.我建议提高你的要求,或考虑更松散的耦合.例如,套接字通信,Web服务,共享数据库,共享文件或队列.

如果您真的需要在同一个进程中运行Java和.NET,并且需要紧密耦合,请考虑使用JNBridge.
他们已经解决了你所面临的问题.

  • 通过使用套接字在两个进程之间进行通信,建议保持简单的+1. (2认同)