com4j与jacob从Java调用COM方法

Ste*_*mon 8 java com com+ com-interop jacob

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

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

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

Sam*_*erg 13

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

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

我们面临的另一个主要问题是我们不能使用Holder(out params)类来获取shorts.我们最终使Delphi包装器从Integer转换为Short而不是对Com4j进行任何更改.

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