java — com.jacob.com.ComFailException: невозможно сопоставить имя с dispid. Случайные сбои

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

Вступление:

При запуске создайте activeXcomponent и вызовите метод Connect объекта. Метод Connect возвращает экземпляр класса (который написан внутри COM-объекта) по ссылке, называемой здесь «дескриптором».

component=new ActiveXComponent("ServiceName.className");
Dispatch.call(component,FN_CONNECT,sourceType,additionalParams,handle);

Этот дескриптор хранится в переменной уровня класса. Экземпляр этого класса JAVA хранится в пуле соединений и позже используется для будущих вызовов функций. Это делается для того, чтобы следующие вызовы вызывались для объектов / указателей, которые уже инициализированы.

Когда должен быть инициирован вызов выборки данных, он вызывает другой метод с именем fetchData и принимает запрос в качестве входных данных. Возвращает код ошибки и ответ по ссылке. Ссылка на объект компонента осуществляется через экземпляр класса JAVA, который был сохранен в пуле соединений.

Variant response = new Variant("", true);   //String
Variant errorCode = new Variant(0, true);
Dispatch.call(component,FETCH_DATA,handle,functionCode,request,response,errorCode);

Постановка задачи:

Теперь, тестируя в локальной среде, мы обнаружили, что все работает нормально, как и ожидалось, и не исключение. Однако в клиентской среде мы получаем следующую ошибку:

Caused by: com.jacob.com.ComFailException: Can't map name to dispid: fetchData
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
at com.jacob.com.Dispatch.callN(Dispatch.java:453)
at com.jacob.com.Dispatch.call(Dispatch.java:541)

Нам удалось заметить, что один и тот же код прекрасно работает с одной попытки и завершается неудачно при следующей перезагрузке. Это поведение совершенно случайно, поэтому его трудно отследить.

Обратите внимание:

  1. Функция fetchData существует с точно такой же подписью с обеих сторон.
  2. Код работает нормально в какой-то момент и ведет себя плохо после перезапуска.

Мы где-то читаем, JACOB Library плохо себя ведет в многопоточной среде. Это правда?

Если да, что нужно сделать, чтобы все заработало как положено.
Если нет, то почему это исключение выбрасывается случайным образом?

Любая идея / помощь / руководство полезна. Заранее спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]