8

我们编写了一个 Java 程序,希望通过 C# 使用它并与之交互。我们有哪些选择?最理想的情况是,可以将 Java 应用程序编译为一个库 (.DLL),我们可以使用 P/Invoke 从 C# 引用它。但是,根据最初的几次在线搜索,这似乎不是一个选项。

我们选择能够使用 ASP.NET 来构建由 Java 代码驱动的搜索引擎,因此如果这为任何其他选项打开了大门,请告诉我们。

4

4 回答 4

8

抱歉,您从 C# 代码cannot调用 java 。code / classes Directly

执行此操作的一种方法是wrap在 a 中启动您的 java 类,并通过 C# 代码中的该 Web 服务接口java Web Service调用类。indirectly

另一种方法是使用 javareg.exe 将 java 类公开为COM. 您可以在以下位置找到它:

C:\Program Files\Microsoft VisualStudio\VIntDev98\bin\javareg.exe

以下帖子也可能有所帮助

于 2010-03-17T12:49:54.803 回答
5

最简单的方法可能是将您的 java 库的功能发布为 Web 服务,并从您的 asp.net 应用程序中添加一个 Web 引用。

于 2010-03-17T12:47:52.280 回答
2

Java 并不意味着嵌入到另一个程序中,因此您需要一个桥梁。最简单的解决方案是使用套接字:创建一个 Java 进程来侦听套接字上的命令。在 C# 中,将命令发送到套接字并读取答案。

这里的主要问题是序列化,但如果您使用 XML,就不再那么痛苦了。尝试内置 XML 序列化(请参阅本文)或自定义框架,如XStreamSimple

于 2010-03-17T12:52:42.617 回答
0

将 Java 包装在 .dll 中当然是可能的,并且已经成为核心 Java 平台的一部分已经超过 10 年了。JNI (Java Native Interface) 有一个用于在代码中嵌入 JVM 的接口,这意味着您可以使用 C 样式链接运行 Java 类。请注意,这将需要您编写一个简单的 C 包装器,其中包含示例:http: //java.sun.com/docs/books/jni/html/invoke.html#11202

正如其他一些帖子所暗示的那样,有时希望不那么紧密地耦合,因此您可能需要考虑使用另一种设计。一种选择是简单的数据库,Java 应用程序定期轮询来自 C# 代码的请求。如果您想要更紧密的耦合,例如回调,您可以查看分布式接口。

于 2012-08-03T21:14:06.587 回答