首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

COM :IUnknown接口QueryInterface函数介绍

二、COM组件的信息隐藏采用IUnknown接口来实现: 1、IUnknown接口功能简介: IUnknown意思是未知,即未知的接口。...采用这个名字是为了简单起见,所有的COM接口都需要继承IUnknown,因此若某个客户拥有一个IUnknown接口的指针,也就不知道接口到底是什么类型的,只需要知道此接口可以用来查询其他接口。...IUnknown接口有一个用来查询接口的函数QueryInterface。...、QueryInterface返回IUnknown接口时,总是返回同一IUnknown指针。...每个组件实例只有一个IUnknown接口,因此当查询组件实例的IUnknown接口时,不论通过那个接口查询,得到的均将是同一指针值。 总结:遵循这一规则能确定两个接口是否指向同一组件。

62020
您找到你想要的搜索结果了吗?
是的
没有找到

COM 原理与应用学习笔记

对于同一个对象的不同的接口指针,查询得到的 IUnknown 接口必须完全相同。...也就是说,每个对象的 IUnknown 接口指针是唯一的,因此,对两个接口指针,我们可以通过判断其查询到的 IUnknown 接口是否相等来判断它们是否指向同一个对象。...对象 A 也需要为支持聚合做一些事情——实现一个委托 IUnknown 接口和一个非委托 IUnknown 接口。...按照通常使用方式实现的 IUnknown 为非委托 IUnknown,而委托 IUnknown 在不同的情况下有不同的行为:当对象被正常使用时,委托 IUnknown 把调用传递给对象的非委托 IUnknown...;当对象被聚合使用时,委托 IUnknown 把调用传递到外部对象的 IUnknown 接口,即对象被创建时传递进来的 pUnknownOuter 参数,并且,这时外部对象通过非委托 IUnknown

94220

COM聚合技术中的QueryInterface

HRESULT __stdcall CA::NondelegatingQueryInterface(const IID& iid, void** ppv) { if (iid == IID_IUnknown...,查询IUnknown接口时对CA的this指针进行了强制转换,转换成了非委托未知接口。...书中特意强调“通过这一转换,我们可以保证返回的是一个非委托的未知接口指针,当向委托接口指针查询IID_IUnknown时,他返回的将总是一个指向其自身的指针”。...如果没有,那么再看下IUnknown的数据结构:(注意这不是系统中的定义,而是对IUnknown的示意,不过也差不多就是了) interface IUnknown { virtual HRESULT...外部组件CB创建CA时需要获取内部组件CA的IUnknown指针,创建过程中使用NondelegatingQueryInterface进行IUnknown的获取,该函数中将指向CA组件自己的指针强制转换成了非委托未知接口的指针

82120
领券