IE BHO - 句柄按钮元素单击C ++中的事件,为什么断言失败?

时间:2017-03-04 08:29:44

标签: c++ internet-explorer internet-explorer-11 atl bho

我正在编写IE BHO来处理C ++中的按钮单击事件。 其他事件处理得很好,但仅适用于HTMLButtonElementEvents, 当我单击按钮时,msgbox可以显示,但是当我单击OK时,调试断言在atlcom.h第4790行失败。提示是     表达式:((HRESULT)(hr))= 0 我打开了那个文件,看到它的DispCallFunc函数出现了真正的问题。 任何人都可以帮我弄清楚我的代码出了什么问题?非常感谢。

主要代码如下:

class CMyClass:
// Some base classes
, public IDispEventImpl<1, CMyClass,  &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
, public IDispEventImpl<2, CMyClass, &DIID_HTMLButtonElementEvents, &LIBID_MSHTML, 4, 0>
{
    typedef IDispEventImpl<1, CMyClass, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1> SinkImplDWebBrowser;
    typedef IDispEventImpl<2, CMyClass, &DIID_HTMLButtonElementEvents, &LIBID_MSHTML, 4, 0> SinkImplHTMLElement;

    BEGIN_SINK_MAP(CMyClass)
    SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE,     OnDocumentComplete2)
    SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnNavigateComplete2)
    SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, OnBeforeNavigate2)
    SINK_ENTRY_EX(2, DIID_HTMLButtonElementEvents, DISPID_HTMLELEMENTEVENTS2_ONCLICK, OnHtmlElementClick2)
    END_SINK_MAP()

    void STDMETHODCALLTYPE OnDocumentComplete2(IDispatch *pDisp, VARIANT *pvarURL)
    {
            // ...
            // Finded the button i care that is "CComQIPtr<IHTMLButtonElement> spButton" 
            HRESULT hr = SinkImplHtmlElement::DispEventAdvise(spButton);


    }

    void STDMETHODCALLTYPE  OnHtmlElementClick2(IHTMLElementObj *pElement)
    {
            MessageBox(NULL, _T("Button Clicked!!"), IDOK);
    }
}

0 个答案:

没有答案