2009-10-25 55 views
1

我已经写了一个使用ATL的ActiveX控件。我使用向导添加了对连接点的支持,其中添加了public IConnectionPointContainerImpl<CActiveX>CProxy_IActiveXEvents<CActiveX>,其中CProxy_...是向导生成的用于触发事件的代码。Javascript只收到ActiveX事件一次

如下我定义调度接口:

[ UUID(43ECB3DF-F004-4FAD-9BFB-79211A693C3A) helpstring( “的ActiveX事件”) ] 调度接口_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让它再次收到该事件。我错过了什么吗?

回答

1

如果有人有兴趣,我找到了解决这个问题的办法。我已经在ROT(运行对象表)中注册了该对象,但并未撤销任何先前存在的注册。因此,多个注册正在出现。一旦我确保我撤销之前的注册,事件就可靠地开展。