我使用ATL编写了一个ActiveX控件。我使用向导添加了对添加public IConnectionPointContainerImpl<CActiveX>
和CProxy_IActiveXEvents<CActiveX>
的连接点的支持,其中CProxy_...
是向导生成的代码来触发事件。
我已经定义了一个dispinterface如下:
[ UUID(43ECB3DF-F004-4FAD-9BFB-79211A693C3A), helpstring(“ActiveX事件”) ] dispinterface _IActiveXEvents { 特性: 方法: [id(1)] void receiveCertificate([in] VARIANT_BOOL isPermissionGranted,[in] BSTR certificateXml); };
并将其包含在[default,source] dispinterface _IActiveXEvents
的coclass中。要触发事件,我调用Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy())
,这是在向导代码中定义的。
以下Javascript将收到活动
function ActiveXObject::receiveCertificate(permission, certificate) { alert("alert!"); }
问题是它只收到一次事件,我必须关闭并重新打开IE才能让它再次接收事件。我错过了什么吗?
答案 0 :(得分:1)
如果有人有兴趣,我找到了解决这个问题的方法。我在ROT(运行对象表)中注册了该对象,但没有撤销任何以前存在的注册。因此,出现了多个注册。一旦我确保撤销之前的注册,事件就会被可靠地解雇。