【问题标题】:Accessing .NET/dll libraries/components from Java?从 Java 访问 .NET/dll 库/组件?
【发布时间】:2009-01-07 15:01:16
【问题描述】:

是否有从 .NET 到 Java 的廉价或免费网关?我正在寻找一些具有 C/C++ 和 .NET 驱动程序的数据采集硬件——我真的不想在 .NET 中进行任何编程。

更新:我没有做我最初想做的事情,但我做了类似的事情,使用 JNA 从 DLL 封装一些函数,以便从 Java 控制 USB 硬件设备。 (DLL 来自设备制造商)它工作得非常好。谢谢!

【问题讨论】:

  • 也许您应该更改问题的标题,因为它是关于在 Java 中使用 .NET 或 C++,而不仅仅是 .NET。即便如此,看看标题,仍然有点不清楚您是否想在 .NET 环境中使用 Java-Code,反之亦然。
  • 是的。有什么建议么?这是以 Java 为中心的。
  • 可能是“从 Java 访问 .NET”?

标签: java .net


【解决方案1】:

您也可以尝试使用JNA 来访问本机库。 JNA 使 Java 程序可以轻松访问本机共享库(Windows 上的 DLL),而无需编写除 Java 代码之外的任何内容——不需要 JNI 或本机代码。如果他们的 API 相当直接,这可能是阻力最小的路径。

查看他们的getting started guide,他们在其中调用了一些本机代码(printf 和 GetSystemTime)。

【讨论】:

    【解决方案2】:

    嗯,有 JNBridgeEZ JCom,只是来自 Google 搜索。

    您也可以使用IKVM,这是一种略有不同的方法。

    (有什么理由不想学习 .NET,出于兴趣?它是一个不错的平台,而 C# 是一门可爱的语言...)

    【讨论】:

    • 确实是这样,我上周花了我的时间学习 C#(按照我之前的问题)并在那段时间用 Java 重写了一个 15000 行的程序。写得不好,但一个不错的开始。
    • 为什么不使用 .NET:在过去的 17 年里,我不得不为 Microsoft 编程而受苦。我有点厌倦了花费过多的神经元来学习它们的怪癖。
    • 我希望你喜欢 Java 的内置日期/时间 API,以及广泛使用字符串进行字符编码... :)第二。任何一天给我 C# over Java。话虽如此,我每周使用 Java 4 天......)
    • 点都很好。我很快就会在家里买一台 Macintosh,在过去一年左右的时间里,我一直在慢慢迁移到 XUL/Javascript/Java 之类的跨平台技术——我遇到了太多的 ATL/Win32 代码实例不能再维持因为我不记得了。
    • 硬件驱动似乎不是切换开发语言的好理由。根据时间和语言经验,我宁愿切换硬件:)
    【解决方案3】:

    如果他们有 C++ 版本的驱动程序,那么您可以使用 JNI 围绕它编写一个包装器,然后在 Java 中加载它。 JNI 可能有点麻烦,但它可以让你使用他们的驱动程序的 C++ 版本,如果你不想的话,根本不必处理 .Net。

    【讨论】:

    • 确实如此……这似乎是一种皇家的痛苦。我不知道为什么硬件制造商不支持Java。 :(
    • 另外,对于我必须使用的每个不同的数据采集系统,我必须一遍又一遍地这样做:bleah: 8p
    • 是的,这会很烦人。但是您要求一种避免 .Net 的方法。 :)
    • 是的,这就是为什么我给你+1的原因是因为你跳出框框思考。 :)
    【解决方案4】:

    我偏爱使用 C# 深入研究的建议,因为它与 Java 非常相似。我这样做并使用 IKVM 来编译我最喜欢的 Java 库。到 .NET 程序集,并且您可以 [几乎] 启动所有核心 Java 运行时类,因此如果您厌倦了尝试找到正确的 C# 集合类型,您可以随时返回 java.util。 (虽然没有通用集合。不知道为什么。)

    根据您使用的平台,您也有多种免费 IDE 选择。对于 Windows,您可以免费获得 Visual Studio Express,但我也使用 SharpDevelop。您还可以在 Linux 上获得 Mono IDE(我认为还有一些 Unix 版本?)。

    如果您已经了解 Java,那么 C# 的学习曲线就会很浅。由于我仍然不明白的原因,我只炸掉了不知从何而来的地雷上的 1.5 个肢体,但解决方法很容易找到。最糟糕的是该死的开发者文档,因为太慢了,AWFUL。我真的很怀念 JavaDoc 的活泼。不仅在线文档速度慢得令人难以置信,问题还因某人决定将类摘要、构造函数和方法/属性都放在单独的页面上而变得更加复杂,因此它只需要很长时间。有人说要获取文档安装程序并在本地安装文档以稍微改善体验。我想这不是一个坏主意。

    【讨论】:

    • +1 表示地雷评论。 :) “不仅在线文档慢得令人难以置信,问题还因某人决定将类摘要、构造函数和方法/属性都放在单独的页面上而变得更加复杂,所以这只会花很长时间。”没错,就是微软。 :(
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      如果你有一个 Java 应用程序,其他人提到的 JNI 将是要走的路。你写一些包装类,就是这样。

      如果编写包装是一项太大的任务(取决于您必须包装的方法数量),请查看SWIG。我认为它会自动生成包装器,但我从未真正使用过它。

      如果您想用 Java 语言编写代码,但您不关心您的程序是否会在 JRE/JVM 上运行,那么您不妨使用 Microsoft J#。基本上,它编写的 Java 代码被编译为 .NET 字节码,并且可以使用驱动程序的 .NET 类以及现有的 Java 类。使用 J#,如果您现有的 Java 代码比 Java 1.4 更新,您将遇到问题,请查看 this question 以了解如何解决这些问题。

      从那时起,您以后可以添加 J#、C# 或任何其他 .NET 语言的代码。但是,您不会轻易回到 JRE/JVM。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        相关资源
        最近更新 更多