Я написал элемент управления ActiveX с использованием ATL. Я использовал мастер для добавления поддержки точек подключения, которые добавили public IConnectionPointContainerImpl<CActiveX>
и CProxy_IActiveXEvents<CActiveX>
, где CProxy_...
- это код, созданный мастером для запуска событий.Javascript принимает событие ActiveX только один раз
Я определил диспинтерфейс следующим образом:
[ UUID (43ECB3DF-F004-4FAD-9BFB-79211A693C3A), helpstring ("ActiveX Events") ] диспинтерфейс _IActiveXEvents { свойства: методы: [id (1)] void receiveCertificate ([in] VARIANT_BOOL isPermissionGranted, [in] сертификат BSTRXml); };
и включил его в класс с [default,source] dispinterface _IActiveXEvents
. Чтобы запустить событие, я вызываю Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy())
, который указан в мастере-коде.
Следующая Javascript получит событие
function ActiveXObject::receiveCertificate(permission, certificate) { alert("alert!"); }
Проблема заключается в том, что получает только событие один раз, и я должен закрыть и снова открыть IE, чтобы получить его, чтобы снова получить событие. Я что-то упускаю?