关于BHO开发的总结

开发的BHO必须是一个COM组件,在组件中定义一个类,必须实现IObjectWithSite接口,IObjectWithSite接口由IUnknown接口继承而来,也就是说AddRef,Release,和QueryInterface三个方法也是必须实现的,还有两个方法GetSite和SetSite。BHO必须实现SetSite方法。当浏览器启动,打开新窗口或网页内有框架出现时都会创建一个类实例,并调用其SetSite方法。SetSite将收到一个IUnknown类型的接口指针,通过QueryInterface将其转换为IWebBrowser2接口指针,并将其保存下来。之后将该IWebBrowser2接口与DWebBrowserEvent2接口链接,链接后可收到浏览器消息。链接代码如下:

 CComPtr spCP;

 HRESULT hr;

 hr = spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&spCP);

 if(FAILED(hr))

{

       return hr;

}

 //注册事件处理函数表

hr = spCP->Advise(reinterpret_cast (this),&mCookie);

 

Advise接收的可以是一个实现了IDispatch的类,之后产生浏览器消息时,IDispatch::invoke会被调用第一个参数表明了消息类型,pdispparams参数为消息特定参数,可以参考DWebBrowserEvent2接口的方法,压参顺序为从右到左,即最后一个参数为pdispparams参数数组的第一个。

你可能感兴趣的:(框架,浏览器)