QueryInterface()

转载 2012年03月31日 09:30:47
QueryInterface()

QueryInterface()简称QI(),由客户端程序调用这个函数从COM对象请求不同的接口。我们在例子代码中因为只实现一个接口,QI()会很容易使用。QI()有两个参数:一个是所请求的接口IID,一个是指针的缓冲大小,如果查询成功,QI()将接口指针地址存储在这个缓冲指针中。
HRESULT CUnknownImpl::QueryInterface ( REFIID riid, void** ppv ){HRESULT hrRet = S_OK;    // 标准QI()初始化 – 置 *ppv 为 NULL.    *ppv = NULL;    // 如果客户端请求提供的接口,给 *ppv.赋值    if ( IsEqualIID ( riid, IID_IUnknown ))        {        *ppv = (IUnknown*) this;        }    else        {        // 不提供客户端请求的接口         hrRet = E_NOINTERFACE;        }    // 如果返回一个接口指针。 调用AddRef()增加引用计数.    if ( S_OK == hrRet )        {        ((IUnknown*) *ppv)->AddRef();        }    return hrRet;}在QI()中做了三件不同的事情:1、初始化传入的指针为NULL[*ppv = NULL;]。2、检查riid,确定组件对象类(coclass)实现了客户端所请求接口.[if ( IsEqualIID ( riid, IID_IUnknown ))]3、如果确实实现勒索请求的接口,则增加COM对象的引用计数。[((IUnknown*) *ppv)->AddRef();]AddRef()调用很关键。    *ppv = (IUnknown*) this;
要创建新的COM对象引用,就必须调用这个函数通知COM对象这个新引用成立。在AddRef()调用中的强制转换IUnknown*看起来好像多余,但是在QI()中初始化的*ppv有可能不是IUnknown*类型,所以最好是养成习惯对之进行强行转换。。
上面我们已经讨论了一些DLL服务器的内部细节,接下来让我们回头看一看当客户端调用CoCreateInstance()时是如何处理服务器的。

相关文章推荐

com QueryInterface

客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下

COM笔记-QueryInterface函数

客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下        Interface I...
  • mniwc
  • mniwc
  • 2011-08-31 16:47
  • 448

QueryInterface详解 COM

QueryInterface 接口查询 IUnknown:        所有的COM接口均需要继承IUnknown接口。因此,若某个用户拥有一个IUnknown接口指针,它并不需要知道它所拥有的...

COM笔记-QueryInterface函数

客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下        Interface I...
  • mniwc
  • mniwc
  • 2011-08-31 21:55
  • 375

COM笔记-QueryInterface函数

客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下        Interface I...

COM聚合技术中的QueryInterface

最近在看COM聚合技术时遇到一个关于QueryInterface的问题。在《COM技术内幕》和《COM原理与应用》中都是寥寥数句带过,看起来很易理解,我却看了许久才有所领悟。 先说明一下,为了节省篇...

COM学习笔记(一):入门及QueryInterface

#include 定义了-> #define interface struct #include 定义了-> #define pascal __stdcall //**************...

C++程序员之路深入探讨QueryInterface

QueryInterface的本质初探 本文写给COM的初学者! QueryInterface接口对COM的重要性不言而喻,该接口的实现有个规则——由QueryInterface返回的IU...

IUnKNown接口——QueryInterface函数

转自:IUnKNown接口——QueryInterface函数 客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)