2009-10-25 58 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(運行對象表)中註冊了該對象,但並未撤銷任何先前存在的註冊。因此,多個註冊正在出現。一旦我確保我撤銷之前的註冊,事件就可靠地開展。