社区
ATL
帖子详情
看过或正在看《com技术内幕》的看过来
littlebao
2003-08-23 11:20:43
请问p152的m_pUnknowInner->QuerInterface()
这里为什么用>QuerInterface而不是调用NodelegatingQueryInterface()
呢?
因为此时m_pUnknowInner指向的是CB()而此时要查询IID_IY接口,所以只可能
通过NodelegatingQueryInterface()来查询才对啊?
...全文
25
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接口来操作内部组件。
另外,同过运行书上的配套代码,输出信息可以看出它是怎样调用的。
【必看】新型前端核心
技术
-VUE+UNI-App+JS+AJAX前端必学框架APP开发
1、《【必看】2020年新型前端HTML5+CSS3+JS+Canvas+AJAX+Http前后端交互》 如果您已经学过这些课程,您就可以开始下载和安装Hbuilder前端开发软件,开始熟悉开发环境了。 课程精炼衔接性强,
技术
需要多练,才能生巧...
《
COM
技术
内幕
》学习一
两年前大三下学期,听完崔神的GIS中的现代软件
技术
,和很多同学一样把《
COM
技术
内幕
》《Visual ...前几天用C++做了些ArcGIS的二次开发,对组件有了点使用体会,反
过来
在看《
COM
技术
内幕
》有种豁然开朗的感觉
COM
技术
内幕
(笔记)
健忘日记 欢迎UI开发交流与合作 ...
COM
技术
内幕
(笔记)
COM
——到底是什么?——
COM
标准的要点介绍,它被设计用来解决什么问题?基本元素的定义——
COM
术语以及这些术语的含义。 使用和处理
COM
对象
简述Spring
技术
内幕
相信任何一个开发者都使用过Spring这个框架,或许你刚开始使用Spring、或许你有
看过
源码解析系列文章、或许你曾调试过源码、或许你。。。总之不管你的情况如何,你有想过自己实现一个Spring框架么?本篇文章就就来...
Kafka
技术
内幕
Kafka提供了数据复制算法保证,如果leader发生故障或挂掉,一个新leader被选举并被接受客户端的消息成功写入。Kafka确保从同步副本列表中选举一个副本为leader,或者说follower追赶leader数据。leader负责维护和跟踪...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章