为什么我的BHO无法在IObjectWithSite::SetSite()内获取IWebBrowser2指针



我看到了许多BHO示例,我尝试实现这个常见的场景:

STDMETHODIMP CBhoImpl::SetSite(IUnknown* pSite)
{
if (NULL != pSite)
{
CComQIPtr<IWebBrowser2> webBrowser(pSite);
// webBrowser should hold a non-null pointer here
// but it holds a null pointer instead
//whatever
}
// whatever
}

调用SetSite()并进入if分支,但QueryInterface()未能检索到IWebBrowser2

我看到过很多例子都是这样做的。

我做错了什么?

尝试查询IServiceProviderIUnknown参数,如果成功,则可以调用其QueryService()方法来获取IWebBrowser2,例如:

STDMETHODIMP CBhoImpl::SetSite(IUnknown* pSite)
{
if (pSite)
{
CComPtr<IWebBrowser2> webBrowser;
CComQIPtr<IServiceProvider> pServiceProvider(pSite);
if (pServiceProvider)
{
pServiceProvider->QueryService(SID_SWebBrowserApp, IID_PPV_ARGS(&webBrowser));
}
else
{
webBrowser = CComQIPtr<IWebBrowser2>(pSite);
}
if (webBrowser)
{
// use webBrowser as needed...
}
}
}

相关内容

  • 没有找到相关文章

最新更新