Вызов COM-интерфейса Windows и получение ответа

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

Интерфейс: InterfaceName Флаги: (1234) Dual OleAutomation Dispatchable 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. вызвать интерфейс с помощью dispid.

  4. Получите ответ от call/put/invoke (что лучше всего подходит для моего требования?) и обработайте ответ.

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


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


Ответы (1)


Я решил это, используя 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

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

person Himanshu Arora    schedule 11.11.2018