从Java调用C#代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Java调用C#代码?相关的知识,希望对你有一定的参考价值。
有没有人有一个很好的解决方案将一些C#代码集成到一个Java应用程序?
代码很小,所以我可以用java重写,但如果可能的话我宁愿重用代码。不要重复自己,等等。
此外,我知道我可以将C#作为Web服务或其他任何东西公开,但它有一些安全/加密的东西,所以我宁愿保持紧密集成,如果可能的话。
编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时无关紧要。
有一个IL到Java字节码编译器GrassHopper可能对你有用。我从来没有尝试过。
我会考虑用Java重写你的代码
编辑:请注意,Grasshopper似乎不再可用。
您可以通过桥接库调用您的c#类(在dll中编译),可以使用各种库,每个库都具有其特性。 JNBridge生成代理类,您可以调用它们来管理java类中的代码。 JCOBridge允许你加载你的c#类并使用invoke机制从java中使用它,javonet允许你导入java类并使用invoke机制调用java代码。 所有探索的解决方案都是商业解决方案,可让您通过图形用户界面集成和其他便利设施从.NET调用Java代码,反之亦然。
链接: Jace java-.NET bridge开发和部署许可模式,30天免费试用 jnbridge java-.NET bridge开发和部署许可模式,无限试用 jcobridge java-.NET桥接研究和专业许可证架构,注册后可进行30天无限制试用
您将使用Java Native Interface调用编译为DLL的C#代码。
如果它只是少量的C#,那么将它移植到Java会容易得多。如果它很多,这可能是一个很好的方法。
以下是对它的高级概述:
http://en.wikipedia.org/wiki/Java_Native_Interface
您的另一个选择是从C#代码创建COM程序集并使用J-Interop来调用它。
http://sourceforge.net/projects/j-interop/
我是jni4net的作者,JVM和CLR之间的开源内部进程桥。它建立在JNI和PInvoke之上。不需要C / C ++代码。我希望它会对你有所帮助。
如果它很短,我认为你最好在java中重写代码。下载一个50Mb的运行时已经足够糟糕了。
我们使用了JNBridge,它运行得很好。它处理Java - > .NET,反之亦然,所有都在进程中。
如果您不想重写处理它作为qazxsw poi并选择以下之一:
- 命名管道
- 套接字
- 肥皂
如果不是太麻烦我会改写它。 Web服务可以工作,但似乎重用一些代码会带来很多开销。
Inter-process communication建议在同一进程空间中运行CLR和JVM并来回传递调用。听起来非常有效。如果它运作良好,我会尝试将其整合到http://www.infoq.com/articles/in-process-java-net-integration中。
如果它是一段可作为命令行实用程序公开的代码,我只是让其他主机语言使用系统调用来执行该实用程序。
如果您的C#app需要调用Java,请编译一个特殊的Java main,它采用适当的命令行参数并返回文本输出。
它是最古老,最简单的方法。
以上是关于从Java调用C#代码?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Qt/C++ 通过 JNI 调用 Java 代码。 FindClass 找不到类