我维护一个使用Jacob或Java-COM Bridge的遗留Java应用程序,通过MS VBA和MS Word的COM接口进行调用。我一直在关注Sun的com4j,看起来很有希望。
它对我来说很好的原因是它使用vtable绑定到方法,而不是IDispatch。假设我们操作的所有COM对象都存在vtable接口,使用它们而不是IDispatch似乎更简洁。回到COM和CORBA热门二进制接口技术的时代,我似乎记得通过vtable的早期绑定比通过IDispatch的后期绑定提供了更好的性能。
有没有人从雅各布迁移到com4j?如果是这样,那么陷阱和经验教训是什么?
答案 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”。