【发布时间】:2022-01-02 17:41:57
【问题描述】:
初步情况
首先,我想解释一下我的问题的初始情况。我知道 Java 和 .NET 之间的不存在互操作性。我已经对这个主题进行了大量研究,但还没有找到合适的解决方案。无论如何,我相信有一个解决方案!
我正在创建一个需要访问 .jar 文件的 C# 库,或者更准确地说,它需要访问 Java 类。 C#中Java类的使用非常重要,因为我需要传入参数并等待结果。
示例
以下是一个非常简化的示例,说明了它应该如何理想地工作。请注意,偏差是受欢迎的,因为它们不能被排除在最终解决方案中。唯一重要的是我可以在 C# 中创建 Java 类的类实例。
calculation.java:
public class Calculation
{
public int Add(Integer a, Integer b)
{
return a + b;
}
public int Subtract(Integer a, Integer b)
{
return a - b;
}
}
entrypoint.cs:
// Implement / load the Java file
// like: using calculation;
public class Foo
{
public string Bar()
{
// The original constructor of the class is of course in Java
Calculation calc = new Calculation(); // Create class instance
int res = calc.Add(5, 10); // Call method
}
}
进展
首先,我尝试将.jar 文件直接集成/加载到 Visual Studio/C# 中,但我找不到类似的方法。
此外,我尝试使用IKVM8 将我的.jar 文件转换为.dll 文件(D动态 Link L ibrary),但开源项目不再维护,并且在此过程中我遇到了奇怪的错误。
另一种可能的解决方案是使用 JavaScript 创建类实例并将 JavaScript 实现到 C# 中,但如果可能的话,我认为这是一种非常不干净的方式。
目前我正在尝试通过Jni4net 再次将.jar 文件转换为.dll 文件。但是,我不知道如何使用它来将 .jar 文件转换为 .dll 文件。
我非常感谢任何建议,纯粹的!
【问题讨论】:
-
这里有人建议将 jar 包装在 xamarin dll 中:stackoverflow.com/a/40802639/14865005
-
@T.Schwarz 非常感谢!我已经遇到过这个问题,但我不确定最后是否可以生成整个 C# 项目的 .dll。也许您对此了解更多?
-
如果您可以在旁边运行 JVM,您需要能够要求它“实例化并运行它,将结果发送给我”。使用反射作为 REST 服务应该是可行的。或者其他一些远程调用机制。 corba 仍然存在吗?
-
@dratenik 哇,实际上是一个非常好的主意!我曾经为 C# 项目考虑过 REST 服务,但从未想过为 Java 事物本身构建 REST。确实是一个非常好的想法,并且可能比我的想法更平易近人