Вызов интерфейса Windows COM и получение ответа - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть система с интерфейсом Windows COM, так что внешние приложения могут подключаться к нему, и она имеет следующие детали

Интерфейс: InterfaceName Флаги: (1234) Двойная автоматическая доставка GUID: {ABCDEFG-ABCD-1234-ABCD-ABCDE1234} Я хотел бы подключиться к этому интерфейсу через приложение Java Spring, оно отправит запрос этому интерфейсу и обработает ответ.

Я пытался использовать следующий код

 ActiveXComponent mf = new ActiveXComponent("ApplicationName.InterfaceName");
        try {
          Dispatch f2 = mf.QueryInterface(" {ABCDEFG-ABCD-1234-ABCD-ABCDE1234} ");
          Dispatch.put(f2,  201,  new Variant("Request String"));
        } catch (Exception e) {
          e.printStackTrace();
        }

Исполняемый файл открывается, но он не делает то, что я хочу. Я хочу сделать следующее.

  1. Как мне убедиться, что мой интерфейс зарегистрирован, я вижу его под

    Computer\HKEY_CLASSES_ROOT\ApplicationName.InterfaceName
    
  2. Использование ActiveXComponent открывает экземпляр приложения, который не требуется. Приложение уже запущено.

  3. вызов интерфейса с диспид.

  4. Получить ответ от вызова / ввода / вызова (который подходит лучше всего) для моего спроса? ) и обработайте ответ.

Я впервые работаю с JAVA-COM_Interface и не имею большого опыта в этом. Кроме того, я мог найти очень мало примеров для этого в Интернете, и я попытался преобразовать пример, который я нашел для своего проекта, также я не уверен, что подход, который я использую для вызова интерфейса, правильный или нет, я был бы рад, если вы можете помочь!

1 Ответ

0 голосов
/ 11 ноября 2018

Я решил это, используя JACOB lib.

1) Загрузите папку JACOB из здесь .

2) Убедитесь, что ваше приложение работает и содержит подробности под

Computer\HKEY_CLASSES_ROOT\ApplicationName.InterfaceName

3) Убедитесь, что файл ApplicationName.dll зарегистрирован. Если не использовать эту ссылку для получения дополнительной информации regsvr32

4) Используйте этот код Java для отправки данных в интерфейс COM с помощью простого кода ниже.

Dispatch dispatch = new Dispatch("Application.InterfaceName");            
Variant response = Dispatch.call(dispatch, <DISPID>, message); 
syso(response.getString()); // to print the response

Надеюсь, это поможет.

...