Я пытаюсь использовать JACOB для взаимодействия с COM-объектом.
Мне удалось вызвать метод инициализации объекта (и получить его свойства), но я не получаю никаких событий назад. Код указан ниже.
У меня есть образец страницы HTML + Javascript (работает в IE), которая успешно получает события от того же объекта.
Я рассматриваю следующие варианты, но буду признателен за любые конкретные идеи по устранению неполадок ...
Отправить мою программу Java команде, которая разработала объект COM, и
они ищут что-нибудь подозрительное на их стороне (есть ли у объекта способ узнать, есть ли клиент, слушающий его события, и были ли они успешно доставлены?)
Зайдите в нативные части JACOB и попытайтесь отлаживать на этой стороне. Это немного страшно, учитывая, что мой C ++ ржавый и что я никогда не программировал для Windows.
public static void main(String[] args) {
try {
ActiveXComponent c = new ActiveXComponent(
"CLSID:{********-****-****-****-************}"); // My object's clsid
if (c != null) {
System.out.println("Version:"+c.getProperty("Version"));
InvocationProxy proxy = new InvocationProxy() {
@Override
public Variant invoke(String methodName, Variant[] targetParameters) {
System.out.println("*** Event ***: " + methodName);
return null;
}
};
DispatchEvents de = new DispatchEvents((Dispatch) c.getObject(), proxy);
c.invoke("Init", new Variant[] {
new Variant(10), //param1
new Variant(2), //param2
});
System.out.println("Wating for events ...");
Thread.sleep(60000); // 60 seconds is long enough
System.out.println("Cleaning up ...");
c.safeRelease();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ComThread.Release();
}
}