com4j против jacob для вызова COM-методов из Java - PullRequest
8 голосов
/ 14 января 2010

Я поддерживаю устаревшее Java-приложение, которое использует Jacob или Java-COM Bridge для выполнения вызовов через интерфейсы COM MS VBA и MS Word. Я смотрю на com4j от Sun, и это выглядит многообещающе.

Причина, по которой он выглядит хорошо для меня, заключается в том, что он использует привязку vtable к методам вместо IDispatch. Предполагая, что все COM-объекты, которыми мы манипулируем с существующими интерфейсами vtable, кажется более чистым использовать их вместо IDispatch. В те времена, когда в COM и CORBA использовались технологии горячего двоичного интерфейса, я помню, что раннее связывание через vtable давало лучшую производительность, чем позднее связывание через IDispatch.

Кто-нибудь мигрировал из Джейкоба в com4j? Если да, то какие подводные камни и уроки были извлечены?

Ответы [ 2 ]

13 голосов
/ 14 января 2010

Я использовал Jacob и Com4j во время интеграции с простым COM-объектом. Я закончил с Com4j главным образом потому, что Джейкоб утек слишком много памяти. По сравнению с Джейкобом, я думаю, что Com4j был более прямолинейным, когда его установят. Если я правильно помню, Джейкобу потребовалось гораздо больше настройки и ввода текста перед тем, как сделать настоящий COM-вызов. В Com4j вы просто используете предоставленную фабрику.

Com4j работает хорошо для нас, но мы столкнулись с несколькими препятствиями на этом пути. Во-первых, сгенерированные интерфейсы не были сгенерированы правильно, и нам нужно было настроить их вручную. Основные проблемы, которые я помню, заключались в том, что нам не удалось заставить аннотацию @ReturnValue работать должным образом. Также нам нужно было вручную исправить перечисление @VTID.

Еще одна важная вещь, с которой мы столкнулись, заключалась в том, что мы не могли использовать класс Holder (out params) для short s. В итоге мы создали оболочку Delphi, конвертирующую из Integer в Short вместо любых изменений в Com4j.

Наконец, я помню, что я немного волновался о статусе проекта, пока интегрировался. Похоже, что регулярных обновлений нет (прошло два года с момента последнего выпуска обновления).

0 голосов
/ 06 мая 2015

Хотя это очень старый вопрос, но я также рекомендую новым пользователям использовать Com4j, поскольку он более стабилен, у него есть активное сообщество и даже плагин Maven для генерации ваших классов Java. Но вы также можете посмотреть на «j-interop».

...