社区
ATL
帖子详情
看过或正在看《com技术内幕》的看过来
littlebao
2003-08-23 11:20:43
请问p152的m_pUnknowInner->QuerInterface()
这里为什么用>QuerInterface而不是调用NodelegatingQueryInterface()
呢?
因为此时m_pUnknowInner指向的是CB()而此时要查询IID_IY接口,所以只可能
通过NodelegatingQueryInterface()来查询才对啊?
...全文
26
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
技术
内幕
》学习一
两年前大三下学期,听完崔神的GIS中的现代软件
技术
,和很多同学一样把《
COM
技术
内幕
》《Visual C++开发
COM
程序》奉为经典。但是苦于当初知识水平有限,又没有写过任何的
COM
组件甚至没有用过
COM
组件,这些书都是翻了两页就看不下去了,对于我来说实在是太晦涩。 前几天用C++做了些ArcGIS的二次开发,对组件有了点使用体会,反
过来
在看《
COM
技术
内幕
》有种豁然开朗的感觉
COM
技术
内幕
(笔记)
健忘日记 欢迎UI开发交流与合作 duwenjie@gmail.
com
博客园首页博问闪存新随笔联系订阅管理 随笔- 144 文章- 0 评论- 63
COM
技术
内幕
(笔记)
COM
——到底是什么?——
COM
标准的要点介绍,它被设计用来解决什么问题?基本元素的定义——
COM
术语以及这些术语的含义。 使用和处理
COM
对象
简述Spring
技术
内幕
相信任何一个开发者都使用过Spring这个框架,或许你刚开始使用Spring、或许你有
看过
源码解析系列文章、或许你曾调试过源码、或许你。。。总之不管你的情况如何,你有想过自己实现一个Spring框架么?本篇文章就就来简单描述一下Spring中的IOC、MVC、AOP都是如何实现的 IOC 1. 加载配置 早期的Spring框架关于bean的定义都是配置在xml文件中的,就算是现在有了Servi...
Kafka
技术
内幕
1 概述 Kafka起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 Kafka凭借着自身的优势,越来越受到互联网企业的青睐,唯品会也采用Kafka作为其内部核心消息引擎之一。Ka
MFC
技术
内幕
简结 (转)
MFC
技术
内幕
简结 (转)[@more@] 编程中模型 海风在学习新知识时,我个人比较喜欢用联想、比较和总结的方法去思考问题,解决问题,使一切未知的与已知的相联系,使一切已知的相似的相比较,从而总结他们的共性,整理...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章