【问题标题】:Calling C# code from Java?从 Java 调用 C# 代码?
【发布时间】:2010-09-08 04:50:38
【问题描述】:

有没有人有很好的解决方案将一些 C# 代码集成到 Java 应用程序中?

代码很小,所以我可以用 java 重新编写,但如果可能的话,我宁愿重用代码。不要重复自己等。

另外,我知道我可以将 C# 公开为 Web 服务或其他任何东西,但其中包含一些安全/加密内容,所以如果可能的话,我宁愿保持紧密集成。


编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时无关紧要。

【问题讨论】:

  • 如果是基于服务器的,平台是什么?我不知道诸如 COM 互操作之类的东西与 Mono 的工作情况如何,所以这是另一个需要考虑的因素。

标签: c# java java-native-interface


【解决方案1】:

您可以使用 Java 原生接口调用编译成 DLL 的 C# 代码。

如果它是少量的 C#,将它移植到 Java 会容易得多。如果它很多,这可能是一个好方法。

这是它的高级概述:

http://en.wikipedia.org/wiki/Java_Native_Interface

您的另一个选择是从 C# 代码创建一个 COM 程序集并使用 J-Interop 来调用它。

http://sourceforge.net/projects/j-interop/

【讨论】:

    【解决方案2】:

    我是jni4net 的作者,它是 JVM 和 CLR 之间的开源进程内桥梁。它建立在 JNI 和 PInvoke 之上。无需 C/C++ 代码。希望对你有帮助。

    【讨论】:

    • 看起来很酷,你有没有找到同时支持 Linux 和 Windows 的方法?
    【解决方案3】:

    如果它很短,我认为你最好用 java 重写代码。下载一个 50Mb 的运行时已经够糟糕了。

    【讨论】:

      【解决方案4】:

      有一个 IL to Java Bytecode compiler GrassHopper 可能对你有用。不过我没试过。

      我会考虑用 Java 重写你的代码

      编辑:请注意 Grasshopper 似乎不再可用。

      【讨论】:

      • 蚱蜢链接断开。
      • 可能不再可用
      【解决方案5】:

      我们为此使用了JNBridge,效果很好。它处理 Java->.NET,反之亦然,都是在进程内。

      【讨论】:

      • 是的,这是一个商业产品。
      【解决方案6】:

      如果您不想将 hadle 重写为 Inter-process communication 并选择以下之一:

      • 命名管道
      • 套接字
      • 肥皂

      【讨论】:

        【解决方案7】:

        如果不是太麻烦,我会重写它。 Web 服务可以工作,但似乎仅重用一些代码就会产生很多开销。

        【讨论】:

          【解决方案8】:

          http://www.infoq.com/articles/in-process-java-net-integration 建议在同一进程空间中运行 CLR 和 JVM,并来回传递调用。听起来很有效率。我会试一试,如果效果好的话,把它集成到Jace中。

          【讨论】:

            【解决方案9】:

            如果它是一段可作为命令行实用程序公开的代码,我只是让其他宿主语言使用系统调用来执行实用程序。

            如果您的 C# 应用程序需要调用 Java,请编译一个特殊的 Java main,它采用适当的命令行参数并返回文本输出。

            这是最古老、最简单的方法。

            【讨论】:

              【解决方案10】:

              您可以通过桥接库调用您的 c# 类(编译在 dll 中),有各种库可用,每个库都有自己的特点。 JNBridge 生成代理类,您可以调用这些代理类来管理 java 类中的代码。 JCOBridge 让你加载你的c# 类并使用invoke 机制从java 中使用它,javanet 让你导入java 类并使用invoke 机制调用java 代码。
              所有探索的解决方案都是商业解决方案,可让您从 .NET 调用 java 代码,反之亦然,具有图形用户界面集成和其他便利。

              链接
              jnbridge java-.NET bridge 开发人员和部署许可证架构,带 30 天免费试用
              jcobridge java-.NET bridge 开发人员和部署许可证架构,带无限制试用
              javonet java-.NET 桥研究和专业许可架构,注册后 30 天无限制试用

              【讨论】:

                猜你喜欢
                • 2018-09-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-11-08
                • 1970-01-01
                相关资源
                最近更新 更多