社区
ATL
帖子详情
看过或正在看《com技术内幕》的看过来
littlebao
2003-08-23 11:20:43
请问p152的m_pUnknowInner->QuerInterface()
这里为什么用>QuerInterface而不是调用NodelegatingQueryInterface()
呢?
因为此时m_pUnknowInner指向的是CB()而此时要查询IID_IY接口,所以只可能
通过NodelegatingQueryInterface()来查询才对啊?
...全文
90
6
打赏
收藏
看过或正在看《com技术内幕》的看过来
请问p152的m_pUnknowInner->QuerInterface() 这里为什么用>QuerInterface而不是调用NodelegatingQueryInterface() 呢? 因为此时m_pUnknowInner指向的是CB()而此时要查询IID_IY接口,所以只可能 通过NodelegatingQueryInterface()来查询才对啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
littlebao
2003-08-24
打赏
举报
回复
多谢 zhouyong0371(小周周),很抱歉,怎么发消息我还不会呢,呵呵。
不过我终于明白是怎么回事了,
m_pUnknownInner确实是指向INondelegatingUnknown接口,但是,因为
m_pUnknownInner是IUnknown的类型,其实这里他是利用了虚函数的特点,看看下面就知道了
#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;
}
zhouyong0371
2003-08-24
打赏
举报
回复
有问题再问,发消息给我吧
zhouyong0371
2003-08-24
打赏
举报
回复
看P162最下边
HRESULT hr = pB->NondelegatingQueryInterface(iid, ppv);
所以p152中间(void **)&m_pUnknownInner得到的是P160页最上边的
*ppv = static_cast<INondelegatingUnknown *>(this);
明白没有?
所以m_pUnknownInner指向的是INondelegatingUnknown接口。
quanbaoxiao
2003-08-24
打赏
举报
回复
但是m_pUnknowInner->QuerInterface(),而此时内部组件的QueryInterface为
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv)
{
return m_pUnknowOuter->QueryInterface(iid , ppv) ;
}
而且此时的m_pUnknownOuter指向的是外部组件,他又是如何调用了NondeletegatingQueryInterface 的呢?看不出来他是通过什么方式调用了NondeletegatingQueryInterface 的。但是我跟踪代码时
在m_pUnknowInner->QuerInterface()按f11他确实是跳到了
NondeletegatingQueryInterface。
cgsw12345
2003-08-24
打赏
举报
回复
m_pUnknowInner->QuerInterface()
实质上就是调用了NondeletegatingQueryInterface
I think so!
zhouyong0371
2003-08-24
打赏
举报
回复
m_pUnknowInner->QuerInterface()
实质上就是调用了NondeletegatingQueryInterface P159
P141:
若内部组件......外部组件将通过非委托unknown接口来操作内部组件。
另外,同过运行书上的配套代码,输出信息可以看出它是怎样调用的。
初读《
COM
技术
内幕
》有感
本文分享了作者初次阅读《
COM
技术
内幕
》的感受,认为该书比《
COM
本质论》更易于理解,但后者在阐述
COM
原理方面更为深刻。尽管如此,《
COM
技术
内幕
》仍然是一本值得一读的好书。
《
COM
技术
内幕
》FAQ
本文解答了《
COM
技术
内幕
》读者提出的七个问题,涉及自动化接口、VTABLE构造、OLE与
COM
初始化的区别、point_default关键字、Invoke函数实现等内容,深入探讨了
COM
接口及其实现机制。
COM
技术
内幕
(笔记)
本文详细介绍了
COM
的基本概念,包括它的设计目的、基本元素定义以及如何创建和使用
COM
对象。通过具体的例子,展示了
COM
技术
的应用和重要性。
《
COM
技术
内幕
》
博主在网上碰到《
COM
技术
内幕
》并成功下载,此前该书难找且书店无售,如今无需跑图书城还节省了费用。博主看了两页,认为书写得不错,因其是清华出版。
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章