CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于com接口指针的疑问

楼主xhncmecx(毛刚)2003-11-02 10:48:02 在 VC/MFC / 基础类 提问

以下是com本质论中一个例子:  
   
  void   BadCOMCode(/*[in]*/   IUnknow   *pUnk){  
  ICat   *pCat   =   0;   IPug   *pPug   =   0;  
  HRESULT   hr;  
  hr=   pUnk->QueryInterface(IID_ICat,(void**)&pCat);  
  if(FAILED(hr))goto   cleanup;  
  hr   =   pUnk->QueryInterface(IID_IPug,(void**)&pPug);  
  if(FAILED(hr))goto   cleanup;  
  pPug->Bark();pCat->IgnoreMaster();  
  cleanup:  
  if(pCat)pCat->Release();  
  if(pPug)pPug->Release();  
  }  
   
  书上讲,pCat、pPug和pUnk都指向同一个对象  
   
  我有一个疑问,既然指向同一个对象,这三个接口指针的值却都不同,何解?  
  指向一个对象的地址,不是对象的首地址么,什么会在三个接口指针的值都不同的情况下,还能指向同一个对象? 问题点数:100、回复次数:7Top

1 楼superS(super慢)回复于 2003-11-02 12:17:29 得分 20

这是C++语言多重继承的问题。  
  如果一个类只继承了一个类,则他的实例的前四个字节是虚函数表的地址。但如果一个类继承了多个类,那么它应该有多个虚函数表,好像所有的编译器都是按顺序排列的,即他的实例的最开始四个字节是他继承的第一个类的虚函数表指针,再四个字节是第二个的,以此类推。所以,在转型操作时,编译器会根据你要转成什么而相应对this做出调整(偏移4字节的整数倍以指向该类的虚函数表)。Top

2 楼ablefirst(able)回复于 2003-11-02 12:23:56 得分 20

创建组件对象,如果成功的话,就得到了指向IUnknown的接口指针,因为所有的接口都继承于IUnknown,所以所有的接口都有QueryInterface成员函数,可以通过它获得该对象所支持的任何一个接口指针。接口是包含了一组函数的数据结构。  
  pCat、pPug应该是接口指针。  
  就这些了,希望对你有帮助。Top

3 楼yinzhaohui(努力)回复于 2003-11-02 12:34:56 得分 20

这是同一个对象的不同的接口,在COM中一定有一个接口为IUnknown这个接口中有方法QueryInterface这个方法的作用是通过IID去获这个对象的其它的接口,它返回的是指向同一对象的不同接口,IID_ICat,IID_IPug也是这个对象的两个接口Top

4 楼carbon107(<软件开发思想.h>)回复于 2003-11-02 12:48:21 得分 20

我有一个疑问,既然指向同一个对象,这三个接口指针的值却都不同,何解?  
    当然不同了,指向了同一个对象.但是这三个接口指针分别指向各自的地址  
  它们都从一个基类继承过来的的三个接口函数.   到了本身的类里就不同了;  
  类的多态性不就是这个道理吗  
   
   
  指向一个对象的地址,不是对象的首地址么,什么会在三个接口指针的值都不同的情况下,还能指向同一个对象?  
  指向的对象是一个对象,但在不同的指针啊,不同指针的地址都不同,虽然是一个地址,那总体来说也是不同的啊  
  Top

5 楼xhncmecx(毛刚)回复于 2003-11-02 13:19:03 得分 0

To:楼上的各位  
   
  如果知道了“N个”接口指针,如何判断它们都指向同一对象?Top

6 楼superS(super慢)回复于 2003-11-02 14:04:23 得分 20

对这N个接口查询IUnknown接口,如果返回值相等则意味着指向同一个接口。Top

7 楼superS(super慢)回复于 2003-11-02 14:07:24 得分 0

打错了,是指向同一个对象。Top

相关问题

  • com接口与接口指针有什么区别?
  • 菜问题:关于com里的接口指针是一个指向指针的指针还是一个指向指针的指针的指针?
  • 请问com的接口为什么要用指针的指针啊
  • c++指针小疑问?
  • c指针小疑问?
  • 指针数组的疑问
  • 初学指针的疑问???
  • IDisposable接口的疑问
  • 怎样获取DIRECX7的接口指针
  • 疑问:关于引用型指针

关键词

  • 接口
  • 指针
  • 函数
  • hr
  • 指向
  • ppug
  • 对象
  • pcat
  • 同一个
  • 疑问

得分解答快速导航

  • 帖主:xhncmecx
  • superS
  • ablefirst
  • yinzhaohui
  • carbon107
  • superS

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo