如何解决为什么我的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
。
我看过很多例子,它们完全一样。
我在做什么错了?
解决方法
尝试查询IUnknown
的参数IServiceProvider
,如果成功,则可以调用其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...
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。