ccbuluo / duilib

Automatically exported from code.google.com/p/duilib
0 stars 0 forks source link

RegisterEventHandler问题 #50

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
源文件:HRESULT CActiveXCtrl::CreateActiveXWnd()
{
    if( m_pWindow != NULL ) return S_OK;
    m_pWindow = new CActiveXWnd;
    if( m_pWindow == NULL ) return E_OUTOFMEMORY;
    m_pOwner->m_hwndHost = m_pWindow->Init(this, m_pOwner->GetManager()->GetPaintWindow());
    RegisterEventHandler(TRUE);
    return S_OK;
}
每个控件都要RegisterEventHandler,然后:HRESULT 
CActiveXCtrl::RegisterEventHandler( BOOL inAdvise )
{
    IWebBrowser2* pWebBrowser=NULL;
    IConnectionPointContainer  *pCPC;
    IConnectionPoint                    *pCP;
    m_pOwner->GetControl(IID_IWebBrowser2, (void**)&pWebBrowser);
    HRESULT hr=pWebBrowser->QueryInterface(IID_IConnectionPointContainer,(void **)&pCPC);
    if (FAILED(hr))
        return hr;

    hr=pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&pCP);
    if (FAILED(hr))
        return hr;

    if (inAdvise)
    {
        hr = pCP->Advise((IUnknown*)(void*)this, &m_dwCookie);
    }
    else
    {
        pCP->Unadvise(m_dwCookie);
    }
    return hr; 
}
如果我的ActiveX不是IWebBrowser2那么就会在    m_pOwner->GetControl(IID_IW
ebBrowser2, (void**)&pWebBrowser);
    HRESULT hr=pWebBrowser->QueryInterface(IID_IConnectionPointContainer,(void **)&pCPC);
这2句崩溃掉。请提供解决方法。

Original issue reported on code.google.com by wxl_...@hotmail.com on 30 Jul 2012 at 6:23

GoogleCodeExporter commented 8 years ago
我目前的方法是m_pOwner->GetControl(IID_IWebBrowser2, 
(void**)&pWebBrowser);
if(NULL == pWebBrowser)
return 0;
    HRESULT hr=pWebBrowser->QueryInterface(IID_IConnectionPointContainer,(void **)&pCPC);

Original comment by wxl_...@hotmail.com on 30 Jul 2012 at 6:30