QueryInterface的最后一个参数为什么要void** ppv?为何不用void *pv?

musicdancer 2001-02-18 01:36:00
在看inside com,请问大虾之所以用ppv而不用pv的原因,CoCreateInstance也是用ppv.
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
musicdancer 2001-02-18
  • 打赏
  • 举报
回复
感谢大家帮忙。原来是自己对指针的理解(一直)有些问题,看来c++语法还得看看。
谢谢各位。
jimconrad 2001-02-18
  • 打赏
  • 举报
回复
倒数第二行是&pCF,不好意思。
musicdancer 2001-02-18
  • 打赏
  • 举报
回复
to jjony:
我想你理解错了问题。我说ppv和pv只是想说的方便;
我是说使用void**ppv的原因,
我想不会没用原因吧。接口的指针应是*ppv吧。在传入接口指针是用&pIX之类,在函数内是用*ppv=static_cast<IX*>this,那么为什么不这样:传入pIX,函数内是pv=static_cast<IX*>this.
难道就是没有道理?

jimconrad 2001-02-18
  • 打赏
  • 举报
回复
那是指向指针的指针。
ppvObj ---> pvObj ---> 服务器中接口对象Object;
CoGetClassObject( , ,void** ppvObj)中最后一个是void**类型,主要是为了在参数传递中可以改变*ppvObj的值,即pvObj的值。
比如在客户程序中,你定义了
IClassFactory* pCF = NULL;
这时pCF还不是指向你需要的接口的指针,为了得到她,你调用CoGetClassObject(),与从服务器获得pCF接口;要是最后一位参数是void* pvObj,那你就无法得到pvObj的值了,因为值传递是单向的,CoGetClassObject()无法返回你需要的pCF;所以使用指针,向CoGetClassObject()传pCF的指针&pMC,这样就可以返回这个接口指针的QueryInterface的值了。
所以使用ppv啰!
wyzegg 2001-02-18
  • 打赏
  • 举报
回复
因为C语言要传地址,所以当传指针时就需要指针的指针
JJONY 2001-02-18
  • 打赏
  • 举报
回复
ppv只是一个名字而已,你喜欢可以用pv也行啊。呵呵。。。
void**是得到一个接口指针的值,而void *pv是得到接品指针所指的内存内容。
我想如果要学COM的话,在C++方面就最好不要问这种问题。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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