Я написал элемент управления 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, чтобы он снова получил событие. Я что-то упустил?