大家看看这个函数到底调用的是那个??(答完立即结帖)

quanbaoxiao 2003-08-24 08:57:30

class IUnknown
{
virtual HRESULT __stdcall QueryInterface(const IID & , void **) = 0 ;
};


class INondelegatingUnknown
{
virtual HRESULT __stdcall
NodelegatingQueryInterface(const IID & , void **) = 0 ;
};

class CB : public IUnknown , INondelegatingUnknown
{
virtual HRESULT __stdcall QueryInterface(const IID & , void **)
{
.........
}
virtual HRESULT __stdcall
NodelegatingQueryInterface(const IID & , void **)
{
.........
}
};

class CA : public IUnknown
{


virtual HRESULT __stdcall QueryInterface(const IID & , void **)
{
.........
}
void Init()
{
IUnknow *ppv = NULL ;
//然后ppv通过某种途径获得ppv = static_cast<INondelegatingUnknown *>(this) 而this指向一个CB类
ppv->QueryInterface(iid , p) ;
//问此时ppv调用的是CB中的那个函数(QueryInterface()还是NodelegatingQueryInterface())
}
};









...全文
39 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanbaoxiao 2003-08-24
  • 打赏
  • 举报
回复
呵呵,我终于明白了,看看下面这个就知道了
#include "stdafx.h"
#include "iostream"
using namespace std ;

class CA
{
public :
virtual void fun1() = 0 ;
virtual void fun2() = 0 ;
virtual void fun3() = 0 ;
};

class CB
{
public :
virtual void BFun1() = 0 ;
virtual void BFun2() = 0 ;
virtual void BFun3() = 0 ;
};

class CC : public CA
{
public :
virtual void fun1() {cout<<"fun1"<<endl ;}
virtual void fun2() {cout<<"fun2"<<endl ;}
virtual void fun3() {cout<<"fun3"<<endl ;}

};


int _tmain(int argc, _TCHAR* argv[])
{
CB * pB = NULL ;
CC Ctest ;
pB = reinterpret_cast<CB *>(static_cast<CA*>(&Ctest)) ;
pB->BFun1() ;
pB->BFun2() ;
pB->BFun3() ;
return 0;
}
积木 2003-08-24
  • 打赏
  • 举报
回复
关注中……
理论上应该没有这个问题啊
quanbaoxiao 2003-08-24
  • 打赏
  • 举报
回复
是啊,但是我按f11时他却跑到NodelegatingQueryInterface()去了,唉,真是百思不得其解啊。谁也在看这本书啊,大家讨论讨论。
积木 2003-08-24
  • 打赏
  • 举报
回复
在看com啊
虚函数就是类层次之间同名函数之间有动态绑定的问题
不同名的函数是没有这个问题的
所以就是QueryInterface()
quanbaoxiao 2003-08-24
  • 打赏
  • 举报
回复
我也这么觉得,可是在《com技术内幕》(p152)里他却是
NodelegatingQueryInterface(),不知道为什么?
nriet8357 2003-08-24
  • 打赏
  • 举报
回复
QueryInterface()
loyyer 2003-08-24
  • 打赏
  • 举报
回复
QueryInterface()
nsyncbin 2003-08-24
  • 打赏
  • 举报
回复
我建议你以后遇到这类问题怎样自己解决,一步一步的调试,这样你可以学到很多知识,毕竟编程也是为了学习。

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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