IE BHO - обрабатывать событие нажатия элемента кнопки в C++, почему утверждение не выполнено?

Я пишу IE BHO для обработки события нажатия кнопки в C++. Другие события обрабатываются хорошо, но только для HTMLButtonElementEvents. Когда я нажимаю кнопку, появляется сообщение msgbox, но когда я нажимаю кнопку ОК, сбой отладочного подтверждения в строке 4790 atlcom.h. Подсказка - выражение: ((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 ответов

Другие вопросы по тегам