JACOB — удаленный диспетчерский вызов COM-интерфейса

Я использую JACOB для записи сообщения в COM-интерфейс.

Dispatch dispatch = new Dispatch("<Interface Name>");
Variant response = Dispatch.call(dispatch, <DISPID>, message);

Это отлично работает на локальном хосте. Но как я могу использовать API JACOB для вызова интерфейса на другом компьютере/IP-адресе?


person Himanshu Arora    schedule 01.05.2019    source источник


Ответы (1)


JACOB, похоже, не может получить удаленный доступ (вызов DCOM).

Часто задаваемые вопросы о списке рассылки проекта JACOB

Можно ли вызвать компонент COM на разных компьютерах или в операционных системах?
Ответ на этот вопрос — нет. jacob реализуется с использованием JNI и библиотеки DLL C++, разработанной для платформы Windows. COM — это двоичный стандарт, определенный Microsoft, поскольку он еще не был перенесен (насколько мне известно) на какие-либо другие платформы. Jacob — это всего лишь Java-мост для COM, который определяет, как компоненты взаимодействуют друг с другом, когда они находятся на одной машине. Стандарт DCOM определяет, как компоненты обмениваются данными по сети, но Джейкоб не поддерживает DCOM.

Решения:

  • Коммерческие продукты, такие как J-Integra, изначально поддерживают протокол DCOM.
  • Используйте РМИ. Создайте оболочку для классов Jacob и RMI'ify. На самом деле это работает, но ведущий Джейкоб не хотел, чтобы классы реализовывались сериализуемыми, что немного усложняло всю операцию.
  • Используйте веб-службы. Предоставьте материал, который вы хотели бы иметь в качестве веб-службы, и используйте SOAP и закуски на стороне Java для доступа к нему.

В качестве альтернативы может быть полезно, если локально работающий COM-объект поддерживает внутренний удаленный доступ.

Вроде бы следующая статья.

Джейкоб подключается к удаленному компьютеру для поддержки WMI

Пример набора записей ADODB

Проект JACOB: мост JAva-COM

Загрузки
Двоичный дистрибутив JACOB (jacobBin_XX.zip) включает:

  1. jacob.jar: файл JAR для классов Java, который вы должны добавить в свой CLASSPATH. Имена пакетов заменяют com.ms на com.jacob (например, com.ms.com.Variant сопоставляется с com.jacob.com.Variant.
  2. jacob.dll: небольшая библиотека DLL Win32, которую необходимо добавить в PATH.
  3. образцы: предоставляются в исходном коде Java и в скомпилированной форме для демонстрации различных функций продукта. В частности, в качестве примеров предоставляется набор классов-оболочек для Microsoft® ADO.

Исходный код доступен в исходном дистрибутиве JACOB (jacobSrc_XX.zip), который включает код Java и C++. Исходный дистрибутив является надмножеством бинарного, поэтому вам не нужны оба.


У других, кажется, есть другие библиотеки, а не JACOB.

DCOM-мост на чистом Java с j -взаимодействие

j-interop/j-interop/ источник/readme.htm


Дополнительно:

Точно так же его нельзя вызвать между компьютерами, подключенными через локальную сеть.

Также невозможно удаленно вызывать локальные COM-объекты с помощью языка VC++ или .NET.

Обходной путь — создать прокси-приложение для вызова локального COM-объекта на удаленном компьютере.

Спроектируйте основное приложение и прокси-приложение произвольно, чтобы они могли взаимодействовать друг с другом с помощью сокета или других средств.

person kunif    schedule 01.05.2019
comment
Привет kunif, Большое спасибо за ответ на мой вопрос, и последнее, означает ли это, что он не будет работать и в локальной сети? Если я хочу добиться вызова COM-интерфейса через LAN IP с использованием Java, какой лучший подход или API я должен использовать, пожалуйста, предложите? - person Himanshu Arora; 02.05.2019