com4j与jacob从Java调用COM方法

时间:2010-01-14 18:00:27

标签: java com com-interop com+ jacob

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

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

有没有人从雅各布迁移到com4j?如果是这样,那么陷阱和经验教训是什么?

2 个答案:

答案 0 :(得分:13)

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

Com4j对我们来说一直很好,但我们在途中遇到了一些障碍。首先,生成的接口未正确生成,我们需要手动调整它们。我记得的主要问题是我们无法使@ReturnValue注释正常工作。此外,我们需要手动更正@VTID枚举。

我们面临的另一个主要问题是我们无法使用Holder({1}}({para})类来short。我们最终将Delphi包装器从Integer转换为Short而不是对Com4j进行任何更改。

最后,我记得在整合时我对项目状态有点担心。似乎没有定期更新(自上次维护版本发布以来已有两年)。

答案 1 :(得分:0)

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