在BHO中使用HTMLDocumentEvents2捕获OnClick事件时遇到问题

Yon*_*tan 5 c++ com dom bho atl

我正在运行BHO,我正在尝试使用HTMLDocumentEvents2捕获OnClick事件但是,事件似乎永远不会到达处理程序

这就是我在做的事情:

class ATL_NO_VTABLE CBlastBhoBHO :
  public CComObjectRootEx<CComSingleThreadModel>,
  public CComCoClass<CBlastBhoBHO, &CLSID_BlastBhoBHO>,
  public IObjectWithSiteImpl<CBlastBhoBHO>,
  public IDispatchImpl<IBlastBhoBHO, &IID_IBlastBhoBHO, &LIBID_BlastBhoLib, /*wMajor     =*/ 1, /*wMinor =*/ 0>,
  public IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 1, 0>,
  public IDispEventImpl<1, CBlastBhoBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>



BEGIN_SINK_MAP(CBlastBhoBHO)
SINK_ENTRY_EX(0, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONCLICK,   OnClickTrigger)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE,      OnDocumentComplete)
END_SINK_MAP()


// Handlers
void STDMETHODCALLTYPE CBlastBhoBHO::OnDocumentComplete( IDispatch *pDisp, VARIANT *url) { // works fine }
void STDMETHODCALLTYPE CBlastBhoBHO::OnClickTrigger(IHTMLEventObj *pEvtObj) { // Never called }

// From SetSite()
  ATL::IDispEventSimpleImpl<1,CBlastBhoBHO,&DIID_DWebBrowserEvents2>::DispEventAdvise(m_spWebBrowser); 


// From OnDocumentComplete
 CComQIPtr<IHTMLDocument3> doc_;
m_spWebBrowser->get_Document((IDispatch**) &doc_);
ATL::IDispEventSimpleImpl<0,CBlastBhoBHO,&DIID_HTMLDocumentEvents2>::DispEventAdvise(doc_);
Run Code Online (Sandbox Code Playgroud)

我尝试了几种变体(使用HTMLElementEvents2等)或在不同对象上提供建议或在SetSite上对文档提供建议.我的处理程序从未被调用.

任何帮助将非常感激.我只需要onClick事件.

use*_*954 1

可能是因为LIBID_MSHTML的版本不匹配,尝试将其更改为4.0版本,即全部更改

IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 1, 0>

到

IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 4, 0>