社区
ATL
帖子详情
看过或正在看《com技术内幕》的看过来
littlebao
2003-08-23 11:20:43
请问p152的m_pUnknowInner->QuerInterface()
这里为什么用>QuerInterface而不是调用NodelegatingQueryInterface()
呢?
因为此时m_pUnknowInner指向的是CB()而此时要查询IID_IY接口,所以只可能
通过NodelegatingQueryInterface()来查询才对啊?
...全文
67
6
打赏
收藏
看过或正在看《com技术内幕》的看过来
请问p152的m_pUnknowInner->QuerInterface() 这里为什么用>QuerInterface而不是调用NodelegatingQueryInterface() 呢? 因为此时m_pUnknowInner指向的是CB()而此时要查询IID_IY接口,所以只可能 通过NodelegatingQueryInterface()来查询才对啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
对象——如何创建、使用和销毁
COM
对象。基本接口——描述IUnknown基本接口及其方法。 掌握串的处理——在
COM
代码中如何处理串。应用
COM
技术
——例子代码,举例说明本文所讨论的所有概念。 处理HRESULT——HRESULT类型描...
《
COM
技术
内幕
》学习一
两年前大三下学期,听完崔神的GIS中的现代软件
技术
,和很多同学一样把《
COM
技术
内幕
》《Visual C++开发
COM
程序》奉为经典。但是苦于当初知识水平有限,又没有写过任何的
COM
组件甚至没有用过
COM
组件,这些书都是翻了两页就看不下去了,对于我来说实在是太晦涩。 前几天用C++做了些ArcGIS的二次开发,对组件有了点使用体会,反
过来
在看《
COM
技术
内幕
》有种豁然开朗的感觉
COM
技术
内幕
(笔记)
COM
——到底是什么?——
COM
标准的要点介绍,它被设计用来解决什么问题?基本元素的定义——
COM
术语以及这些术语的含义。使用和处理
COM
对象——如何创建、使用和销毁
COM
对象。基本接口——描述IUnknown基本接口及其方法。 掌握串的处理——在
COM
代码中如何处理串。应用
COM
技术
——例子代码,举例说明本文所讨论的所有概念。 处理HRESULT——HRESULT类型描述,如何监测错误及成功代码
简述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
ATL
3,248
社区成员
48,531
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章