为什么用**ppv(com)too

dabou 2001-08-13 02:29:21
HRESULT CX::QueryInterface(const IID& iid,void **ppv)
{
if(iid==IID_IUnknown)
{
*ppv=(IUnknown*)this;
((IUknown*)(*ppv))->AddRef();
}
.....
return S_OK;
}
为什么不用*pv呢?像

HRESULT CX::QueryInterface(const IID& iid,void *ppv)
{
if(iid==IID_IUnknown)
{
ppv=(IUnknown*)this;
((IUknown*)(ppv))->AddRef();
}
.....
return S_OK;
}
...全文
57 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
musicdancer 2001-08-13
  • 打赏
  • 举报
回复
如果用*pv,你需要改变的指针变量的值就改变不了了.
若按
HRESULT CX::QueryInterface(const IID& iid,void *pv)//传入的指针copy给pv(按值传入)
{
if(iid==IID_IUnknown)
{
pv=(IUnknown*)this; //这里只是改变pv,而传入的指针的值没变.而我们的意图是改变传入的指针的值
((IUknown*)(pv))->AddRef();
}
.....
return S_OK;
}
请参考http://www.csdn.net/expert/topic/194/194514.shtm
下次问问题,请先搜一下.

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧