【发布时间】:2010-12-09 22:17:23
【问题描述】:
我使用 ATL 编写了一个 ActiveX 控件。我使用向导添加了对添加了public IConnectionPointContainerImpl<CActiveX> 和CProxy_IActiveXEvents<CActiveX> 的连接点的支持,其中CProxy_... 是向导生成的用于触发事件的代码。
我定义了一个dispinterface如下:
[ uuid(43ECB3DF-F004-4FAD-9BFB-79211A693C3A), helpstring("ActiveX 事件") ] 调度接口_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 才能让它再次接收事件。我错过了什么吗?
【问题讨论】:
标签: javascript c++ events activex