Javascript получает событие ActiveX только один раз - PullRequest
1 голос
/ 25 октября 2009

Я написал элемент управления ActiveX с использованием ATL. Я использовал мастер, чтобы добавить поддержку точек подключения, которые добавили public IConnectionPointContainerImpl<CActiveX> и CProxy_IActiveXEvents<CActiveX>, где CProxy_... - это код, сгенерированный мастером для запуска событий.

Я определил диспинтерфейс следующим образом:

[ UUID (43ECB3DF-F004-4FAD-9BFB-79211A693C3A), строка помощи («События ActiveX») ] dispinterface _IActiveXEvents { свойства: методы: [id (1)] void receiveCertificate ([in] VARIANT_BOOL isPermissionGranted, [in] BSTR certificateXml); };

и включил его в кокласс с [default,source] dispinterface _IActiveXEvents. Чтобы вызвать событие, я вызываю Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy()), что определено в коде мастера.

Следующий Javascript получит событие

function ActiveXObject::receiveCertificate(permission, certificate) {
      alert("alert!");
  }

Проблема в том, что он получает событие только один раз, и мне нужно закрыть и снова открыть IE, чтобы он снова получил событие. Я что-то упустил?

1 Ответ

1 голос
/ 30 ноября 2009

Если кому-то интересно, я нашел решение этой проблемы. Я зарегистрировал объект в ROT (таблица запущенных объектов), но не отменял никаких ранее существующих регистраций. Таким образом, несколько регистраций появились. Как только я убедился, что отменил предыдущие регистрации, события сработали надежно.

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