STDMETHODIMP CSOActiveX::SetClientSite( IOleClientSite* aClientSite )
{
HRESULT hr = IOleObjectImpl<CSOActiveX>::SetClientSite( aClientSite );
if( !aClientSite )
{
ATLASSERT( mWebBrowser2 );
if( mWebBrowser2 )
AtlUnadvise( mWebBrowser2, DIID_DWebBrowserEvents2, mCookie );
return hr;
}
CComPtr<IOleContainer> aContainer;
m_spClientSite->GetContainer( &aContainer );
ATLASSERT( aContainer );
if( SUCCEEDED( hr ) && aContainer )
{
CComQIPtr<IServiceProvider, &IID_IServiceProvider> aServiceProvider( aContainer );
ATLASSERT( aServiceProvider );//这里出错
if( aServiceProvider )
{
aServiceProvider->QueryService( SID_SInternetExplorer,
IID_IWebBrowser,
(void**)&mWebBrowser2 );
ATLASSERT( mWebBrowser2 );
if( mWebBrowser2 )
AtlAdvise( mWebBrowser2, GetUnknown(), DIID_DWebBrowserEvents2, &mCookie );
}
}
return hr;
}
解决方案 »
- IOCP,完成端口问题
- 在View Document中添加一个模态对话框的显示
- VC NextRecordSet怎么读到第二个记录集
- 问个快捷键
- 最近尝试仿照MYIE制作一个浏览器,遇到一个问题.
- **************************************一个文件中存储了所有的文件,他们的数据是如何存储的?**************************************
- 如何取随机数呢?紧急!
- 知道一个int型数的每个字节,怎么得到这个数
- MFC演示汉诺塔
- 怎么写edit,listbox之类控件?
- Wininet与Winsock之间有代理如何通信?
- 光棍节活动奖励发放
你可以先用 CComPtr<IServiceProvider> 先建立这个对象,然后再queryinterface一下,看是否能正常获得。
如果是这样的话那 queryinterface 返回的 HRESULT 是 SUCCED 的吗?因为对于CComQIPtr 接口他自己内含 queryintface的,如果query 失败 那么就直接返回 NULL, 如果使用CComPtr 至少可以看到 query 返回的是什么原因代码 。