CComPtr<IWebBrowser2> m_spWebBrowser;STDMETHODIMP CRayBHO::SetSite(IUnknown*pUnkSite)
{
if(pUnkSite!=NULL)
{
pUnkSite->QueryInterface(IID_IWebBrowser2,(void**)&m_spWebBrowser);
}
else
{
m_spWebBrowser.Release();
}
return IObjectWithSiteImpl::SetSite(pUnkSite);
}上面的那个release需要吗上面是否可以改成
if(pUnkSite!=NULL)
{
m_spWebBrowser = pUnkSite;
}
else
{
m_spWebBrowser.Release();
}
{
if(pUnkSite!=NULL)
{
pUnkSite->QueryInterface(IID_IWebBrowser2,(void**)&m_spWebBrowser);
}
else
{
m_spWebBrowser.Release();
}
return IObjectWithSiteImpl::SetSite(pUnkSite);
}上面的那个release需要吗上面是否可以改成
if(pUnkSite!=NULL)
{
m_spWebBrowser = pUnkSite;
}
else
{
m_spWebBrowser.Release();
}
解决方案 »
- 用套子的感觉实在不爽,超薄的是不是会好点?
- 怎么在少占用cpu的前提下往数据库里写入海量数据
- 想用MFC和OPENGL做一个控件,请给点指点?
- CET今晚放榜,看看etang怎么应付N万的并发。
- 让一个对话框显示在屏幕的最低部如何处理???
- 为什么会出现错误?一个比较复杂的问题,可能和多继承、泛型有关 -=100分=-
- 有DLL编程的书和资料吗?能介绍一些吗?
- 在win32 dll中能否支持MFC类库???
- 在线等待:一个API中字符问题!请高手执教!100分
- insert into。。。select 查询值的返回
- 求助怎么实现MDI文档切换就比如EXCEL的标签切换看了网上那个,但是怎么去把每个文档映射
- VC6设计界面的时候可不可以直接输入一个数字设置控件或窗体的大小
class CComPtr
{
public:
typedef T _PtrClass;
CComPtr()
{
p=NULL;
}
CComPtr(T* lp)
{
if ((p = lp) != NULL)
p->AddRef();
}
CComPtr(const CComPtr<T>& lp)
{
if ((p = lp.p) != NULL)
p->AddRef();
}
~CComPtr()
{
if (p)
p->Release();
}
void Release()
{
IUnknown* pTemp = p;
if (pTemp)
{
p = NULL;
pTemp->Release();
}
}
//..... 省略掉无关代码 T* operator=(T* lp)
{
return (T*)AtlComPtrAssign((IUnknown**)&p, lp);
}
T* operator=(const CComPtr<T>& lp)
{
return (T*)AtlComPtrAssign((IUnknown**)&p, lp.p);
} //..... 省略掉无关代码 T* p;
};ATLINLINE ATLAPI_(IUnknown*) AtlComPtrAssign(IUnknown** pp, IUnknown* lp)
{
if (lp != NULL)
lp->AddRef();
if (*pp)
(*pp)->Release();
*pp = lp;
return lp;
}所以,要不要显示的调release要看你的需求,m_spWebBrowser析构时会自动调release。至于m_spWebBrowser = pUnkSite;应该是可行的,只要你确保传进去的pUnkSite是IWebBrowser2*类型的(IWebBrowser2是从IUnknown过来的,所以IWebBrowser2指针和该对象的IUnknown指针相同)。
如果是COM类里面的,可以在finalrelease里面调用