com4j与jacob:从Java调用COM方法的比较

8
我维护一个遗留的Java应用程序,使用Jacob或Java-COM Bridge通过MS VBA和MS Word的COM接口进行调用。我一直在研究Sun的com4j,它看起来很有前途。
我认为它好的原因是它使用vtable绑定到方法,而不是IDispatch。假设我们操作的所有COM对象都呈现出vtable接口,那么使用它们似乎比使用IDispatch更干净。回想起当COM和CORBA是热门的二进制接口技术时,通过vtable进行早期绑定似乎比通过IDispatch进行晚期绑定具有更好的性能。
是否有人从Jacob迁移到com4j?如果是这样,有什么问题和经验教训?
2个回答

13

我曾在集成一个简单的COM对象时都用过Jacob和Com4j。最终我选择了Com4j,主要是因为Jacob会泄漏太多内存。与Jacob相比,一旦设置好,我认为Com4j更加直接。如果我记得正确的话,Jacob在实际调用COM之前需要更多的设置和打字。而在Com4j中,你只需使用提供的工厂。

Com4j对我们来说效果还不错,但我们在路上遇到了一些问题。首先,生成的接口没有正确生成,我们需要手动进行调整。我记得最主要的问题是我们无法使 @ReturnValue 注释正常工作。此外,我们需要手动更正 @VTID 枚举。

我们面临的另一个主要问题是无法将Holder(输出参数)类用于short类型。最终,我们制作了一个Delphi包装器,将整数转换为短整型,而不是对Com4j进行任何更改。

最后,我记得当我集成时有点担心项目状态。似乎没有定期更新(自上次维护发布以来已经两年了)。


1
谢谢。我不想在没有提供细节的情况下涉及Jacob内存泄漏问题,但我们也见过它。我想我会用com4j做一个演示项目,再用Jacob做一个,亲身体验它们之间的差异。 - Stephen Harmon
我正在考虑从com4j转向jacob,因为不幸的是,com4j只能与32位Java而非64位Java一起使用,所以在未来似乎已经无法继续使用了。 - Paul Taylor
作为对@PaulTaylor评论的更新,com4j已经更新为支持64位Java - Rob Andren

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接