8

我维护一个使用Jacob或 Java-COM Bridge 的遗留 Java 应用程序,通过 MS VBA 和 MS Word 的 COM 接口进行调用。我一直在看 Sun 的com4j,它看起来很有希望。

它对我来说看起来不错的原因是它使用 vtable 绑定到方法,而不是 IDispatch。假设我们操作的所有 COM 对象都存在 vtable 接口,使用它们而不是 IDispatch 似乎更简洁。回到 COM 和 CORBA 成为热门二进制接口技术的时代,我似乎记得通过 vtable 进行的早期绑定比通过 IDispatch 进行的后期绑定提供了更好的性能。

有人从 Jacob 迁移到 com4j 吗?如果是这样,有哪些陷阱和经验教训?

4

2 回答 2

13

在针对一个简单的 COM 对象进行集成时,我同时使用了 Jacob 和 Com4j。我最终选择了 Com4j,主要是因为 Jacob 泄露了太多内存。与 Jacob 相比,我认为 Com4j 设置后更直接。如果我没记错的话,Jacob 在进行实际的 COM 调用之前需要更多的设置和输入。在 Com4j 中,您只需使用提供的工厂。

Com4j 对我们来说工作正常,但我们在路上遇到了一些障碍。首先,生成的界面没有正确生成,我们需要手动调整它们。我记得的主要问题是我们无法让@ReturnValue注释正常工作。此外,我们需要手动更正@VTID枚举。

我们面临的另一件主要事情是我们不能Holder为 s 使用 (out params) 类short。我们最终制作了一个从 Integer 转换为 Short 的 Delphi 包装器,而不是对 Com4j 进行任何更改。

最后,我记得我在集成时有点担心项目状态。似乎没有定期更新(距上次维护版本已有两年)。

于 2010-01-14T19:05:42.207 回答
0

虽然这是一个很老的问题,但我也推荐新人使用 Com4j,因为它更稳定,它有一个活跃的社区,甚至还有一个用于生成 Java 类的 Maven 插件。但是您可能还想看看“j-interop”。

于 2015-05-06T11:26:26.953 回答