【问题标题】:Use a .jar java library API in C#?在 C# 中使用 .jar java 库 API?
【发布时间】:2020-01-01 22:23:05
【问题描述】:

我是入门级程序员,所以请在您的回复中描述性。

我正在尝试在我的 C# .net 应用程序中使用作为 .jar 文件提供的 Java API。我不太了解 Java,但是当我尝试运行这个 .jar 文件时,它说“没有主类清单属性”,所以这意味着它是一个库?此 Java API 还附带一个 .java 文件,该文件显示了如何使用该库,但我看不到 .jar 中的代码。

我在这个网站上找到了this question,其中一个答案是:“以简单的方式,您可以将 java 类打包到 jar 文件中,然后在 C# 中使用 Process 类来执行和映射 IO 流。”我对 C# 中的 Process 类有点熟悉,但我不明白如何在我的 C# .net 项目中使用它来使用 Java 库。

这可能吗?还是那个答案不正确?

如果是这样,您能否解释一下如何在我的 C# 应用程序中使用 .jar 库。

【问题讨论】:

    标签: java c# .net interop


    【解决方案1】:

    您可以使用 IVKM.Net 来完成。 IVKM.NET 包含一个名为 ikvmc 的应用程序。这是此工具的文档:

    http://www.ikvm.net/userguide/ikvmc.html

    要使用它,请将您的 java 代码编译成 Jar。

    然后运行ikvmc程序:

    ikvmc myCode.jar

    如果您的 jar 包含 main() 函数,它将被转换为可以在 CLR 上运行的 exe。否则会被转换成dll。要在您的项目中使用 dll,只需将它们添加为 Visual Studio 中的引用,您可以在您的 .Net 应用程序中访问在 Java 中可用的相同 API。

    您还可以包含来自 ikvmc 的 IKVM.GNU.Classpath.dll dll,并在您的应用程序中使用标准的 java 类库。

    【讨论】:

    • 谢谢,我会试一试。一旦我有了 .dll 并将其导入到我的项目中,我应该使用 Pinvoke 调用库的函数吗?
    • 您不需要使用 pinvoke。您应该能够像使用 C# 编写的 orig 一样简单地调用 api。
    • 您应该将“在 CIL 上运行”更改为“在 CLR 上运行”
    • 好东西,刚刚在我的 .net 应用程序中使用它,效果很好。谢谢
    • 我很确定你让我成为了办公室英雄。
    【解决方案2】:

    看看IKVM ...它有一些工具可以为您提供一定程度的互操作性。当你说 Java API 时,我假设你想从 jar 中调用一些功能,而不是仅仅执行它

    【讨论】:

    • 正确,.jar 不执行,它报告一条错误消息,内容为“无法从...加载主类清单属性”。将 .jar 转换为 .dll 后,我将尝试像使用 .jar 的 java 编码示例一样使用它。
    【解决方案3】:
    1. 您可以使用 IKVM.NET - http://www.ikvm.net/userguide/ikvmc.html

      在官网下载——你可以得到 ikvmbin-7.2.4630.5(适用于 Java 7)

      但是,在所有者的博客上,您可以下载更新的版本。 http://weblog.ikvm.net/default.aspx - 你可以得到 ikvmbin-8.1.5717.0(适用于 Java 8)

      要创建 dll/exe 使用:

      ikvmc hello.jar

    2. 另一方面,如果您可以编辑 .jar 库(您创建了它),您 可以使用http://jni4net.com/ 项目。

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多