2009-10-25 4 views
1

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

ответ

1

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

Смежные вопросы