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);
}
}