为什么我的 BHO 无法在 IObjectWithSite::SetSite() 中获取 IWebBrowser2 指针?
Why would my BHO fail to obtain IWebBrowser2 pointer inside IObjectWithSite::SetSite()?
我看过很多 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...
}
}
}
我看过很多 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...
}
}
}