【问题标题】:How to choose a Java-COM bridge? [closed]如何选择 Java-COM 桥接器? [关闭]
【发布时间】:2015-08-13 00:22:14
【问题描述】:

我必须创建一个自动执行 Outlook 和 Word 的应用程序,并且我想使用 Java 来完成该任务。 (唯一允许的替代方案是 VB6,所以...)

在通过 Google 快速调查后,我发现了几个库,但我不确定要使用哪一个:

我不知道如何比较这些库并做出明智的决定。似乎 COM4J 有点过时,JACOB 泄漏内存(据称)并且 jacoZoom 是商业的。每一个似乎都需要大量样板代码来执行简单的方法调用。 (考虑到 COM 的设计,这可能是不可避免的)

除此之外,我不知道如何在其中之一之间进行选择。哪一个是最好的?

【问题讨论】:

  • JACOB 只支持 dispatch-interface;它不能做 vtable 绑定。
  • 我们使用JNA。它支持 COM 并绑定到 Excel 和 Word。

标签: java com


【解决方案1】:

我们在生产环境中使用 Jacob,效果很好。然而,这些项目似乎不是很活跃。

说到这一点:Activity 似乎是 J-Interop 的一个优势。我们也尝试了这个项目,它似乎工作得非常好,甚至有更好的日志消息。我想我们可能会为新项目选择 J-Interop。

COM4J 似乎已经过时了,你是对的。

【讨论】:

  • 我们最终也使用了 Jacob,并且在自动化 Outlook 方面没有遇到问题。
  • 只是把这个留给后代:我最终使用了 JACOB,它确实像其他任何东西一样泄漏内存。我将它用于测量工具自动化(关闭和重新打开连接不是一种选择),它会在几个小时内使 JVM 崩溃。
【解决方案2】:

作为一名在 Java/Linux 方面经验丰富但对 Windows 一无所知的开发人员,这是我的经验(2015 年 8 月)...

执行摘要:

  1. 使用 com4j... 需要注意的是:
  2. 您可能需要构建最新(未发布)的代码才能获得最近的一些重要修复。

更长的故事:

起初,涉及 JNI 的代码会莫名其妙地崩溃,这让我开始寻找非 JNI 的解决方案。 J-Interop 似乎符合要求。

然而,当我试图让 j-interop 工作时,所有的 Windows DCOM 权限和注册表废话使它成为一个完整的 PITA。不同版本的 Windows 是不同的,必须以管理员身份进行必要的更改等。我不明白这些 Windows 废话,无论如何它让我想呕吐。

然后我尝试了 com4j,它的效果非常好。这个项目设计得非常好。它从您正在使用的 DLL 中自动生成 Java 接口。 COM 调用约定细节是在接口方法上使用 Java 注释声明的,允许您在必要时调整这些(在我的情况下不需要调整)。

在 github 上有几个开发人员已经分叉了这个项目并回馈了修复,这是一个健康的迹象。

唯一需要注意的是,您可能需要一些最近的修复,截至 2015 年 8 月,这些修复已合并到项目中,但未包含在最新版本(从 2014 年 3 月开始)中。

因此,您可能需要自己进行自定义构建,包括在 Visual Studio 中构建 DLL 等。即使是 Windows 仇恨者/无知者,我也能够做到这一点。

【讨论】:

    【解决方案3】:

    COM4J 似乎仍然处于活动状态 - 它已移至 Github 并有一个新主页: http://com4j.kohsuke.org/tutorial.html

    【讨论】:

      【解决方案4】:

      Intrinsyc Software http://j-integra.intrinsyc.com/ 的 J-Integra 是您的最佳选择。它隐藏了必须了解不熟悉的编程语言的复杂性。它不依赖于 JNI,因此您不需要了解 JNI。 J-Integra 也得到积极维护和支持,Intrinsyc 为希望在纯 64 位环境中运行的人提供纯 64 位版本。

      Intrinsyc 提供免费试用,因此您可以在进行任何购买之前对其进行测试并查看它是否有效。

      HP、IBM、SAP 和 Oracle 等公司都在使用它,因此您知道它会快速、稳定并得到很好的支持。

      【讨论】:

        【解决方案5】:

        似乎bridj 也可以进行一些 COM 互操作:https://code.google.com/p/bridj/wiki/COM#Example

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 2013-10-03
          • 2012-06-09
          • 2022-06-28
          • 2016-01-19
          • 2011-11-29
          相关资源
          最近更新 更多