我维护一个遗留的 Java 应用程序,它使用Jacob http://danadler.com/jacob/,或Java-COM Bridge,通过MS VBA和MS Word的COM接口进行调用。我一直在看com4j https://com4j.dev.java.net/来自Sun,看起来很有希望。
它对我来说看起来不错的原因是它使用 vtable 绑定到方法,而不是 IDispatch。假设我们操作的所有 COM 对象都存在 vtable 接口,那么使用它们而不是 IDispatch 似乎更干净。回到 COM 和 CORBA 作为热门二进制接口技术的时代,我似乎记得通过 vtable 进行早期绑定比通过 IDispatch 进行后期绑定具有更好的性能。
有人从 Jacob 迁移到 com4j 吗?如果是的话,有哪些陷阱和经验教训?
我在集成一个简单的 COM 对象时使用了 Jacob 和 Com4j。我最终选择了 Com4j 主要是因为 Jacob 泄漏了太多内存。与 Jacob 相比,我认为 Com4j 一旦设置起来就更加直接。如果我没记错的话,Jacob 在进行实际的 COM 调用之前需要进行更多的设置和输入。在 Com4j 中,您只需使用提供的工厂即可。
Com4j 一直运行良好,但我们在使用过程中遇到了一些障碍。首先,生成的接口没有正确生成,我们需要手动调整它们。我记得的主要问题是我们无法获得@ReturnValue
注释才能正常工作。此外,我们还需要手动更正@VTID
枚举。
我们面临的另一件主要问题是我们无法使用Holder
(输出参数)类short
s。我们最终制作了一个从 Integer 转换为 Short 的 Delphi 包装器,而不是对 Com4j 进行任何更改。
最后,我记得我在集成时有点担心项目状态。似乎没有定期更新(自上次维护版本以来已有两年)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)