2010-05-27 56 views
4

您好我有一個的ActiveX這樣的:當一個activex控件被卸載時,IE發送什麼事件?

 
class CMyActiveX : 
    public CComObjectRootEx... 
    ... 
{ 
    HRESULT FinalContruct(){return S_OK;} 
    void Start() 
    { 
     // a new thread is created here for some task 
    } 
    void FinalRelease() 
    { 
     // if the thread is alive kill it 
    } 
} 

然而,當瀏覽器關閉方法FinalRelease不叫。所以線程保持活動狀態並在出口處遇到崩潰。

對此有何想法?謝謝!

回答

1

我發現我的控制:: SetClientSite(NULL)在關閉或離開頁面時被IE可靠地調用,所以我在那裏做了關鍵的關閉工作。 它是IOleObjectImpl中的方法的重寫。

HRESULT CControl::SetClientSite(IOleClientSite *pClientSite) 
{ 
    if (!pClientSite) { 
     // Means IE is closing or about to, or at least 
     // that we've lost our place in the sun... 
     do shutdown stuff 
    } 
    IOleObjectImpl::SetClientSite(pClientSite); 
    if (pClientSite) { 
     .... 

MSDN - IOleObject::SetClientSite method

相關問題