QueryInterface 的实现规则

转载 2007年09月23日 15:22:00

本节将给出一些QueryInterface既的所有实现都必须遵循的一些规则,以便客户能够获取关于组件的足够多的知识并对之施实一些控制和其他有用的处理。如果没有这些规则,是不可能编写出组件的,因为在这种情况下,QueryInterface的行为将是不确定的。具体来讲,这些规则是:
QueryInterface返回的总是同一 IUnknown指针。
若客户曾经获取过某个接口,那么它将总能获取此接口。
客户可以再次获取已经拥有的接口。
客户可以返回到起始接口。
若能够从某个接口获取某特定接口,那么可以从任意接口都将可以获取此接口。

//组件的实现只有一个IUnknown接口
BOOL SameComponents(IX *pIX,IY *pIY)
{
    IUnknown 
*pI1=NULL;
    IUnknown 
*pI2=NULL;
    
//从PIX得到IUnknown接口
    pIX->QueryInterface(IID_IUnknown,(void **&pI1);

    
//从pIY得到IUnknown接口
    pIY->QueryInterface(IID_IUnknown,(void **&pI2);

    
//这两个指针相等吗?
    return pI1==pI2;

};

//可以再次获取已经拥有的接口

void GetInterAgain(IX *pIX)
{
    IX 
*pIX2=NULL;
    
//从IX查询IX接口
    HRESULT hr=pIX->QueryInterface(IID_IX,(void **&pIX2);
    assert(SUCCEEDED(hr));
};
 

ATL学习笔记(3): QueryInterface功能的实现

在CComObjectRootEx类中,实现了线程安全的引用计数管理。而在CComObjectRootEx的父类CComObjectRootBase中,存在对QueryInterface的一个内部实现...
  • DarkMagician_Potter
  • DarkMagician_Potter
  • 2014年06月04日 11:37
  • 832

QueryInterface 实现及使用的完整的例子

下面我们将把前面所提到过和各代码段组合起来,以构成一个说明QueryInterface 实现及使用的完整例子。总的来说可以将这些代码分成三部分。第一部分是接口IX、 IY 和 IZ 的定义部分。接口 ...
  • sunbingzibo
  • sunbingzibo
  • 2007年09月23日 15:21
  • 2288

C++ 编程之QueryInterface函数(一)

前言 组件对外公布的是接口;一个组件可以实现多个接口,也就是说可以对外公布多个接口,之前也总结过了,你很少会100%的去完全了解一个组件的所有接口,就像你去学习编程一样,你几乎不可能去成为编程中...
  • sinat_32596537
  • sinat_32596537
  • 2016年12月14日 23:15
  • 369

关于COM对象创建(CoCreateInstance,与QueryInterface)

panda2002-12-19 05:40 PM一个土问题,关于COM对象的创建 因为生活所迫,这几天必须对COM有所了解。今天看了之后,对COM对象的创建有所困惑。使用CoCreateInstanc...
  • flyfwater
  • flyfwater
  • 2008年05月31日 10:57
  • 2380

第一讲:COM接口与QueryInterface

来自:http://www.vckbase.com/index.php/video/listview/fid/2/sid/12 本节内容: 1、现实中的组件与接口 2、把现实中的思想融入到软...
  • s110600824s
  • s110600824s
  • 2013年02月22日 14:49
  • 398

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

QueryInterface的本质初探 本文写给COM的初学者! QueryInterface接口对COM的重要性不言而喻,该接口的实现有个规则——由QueryInterface返回的IU...
  • dongpanshan
  • dongpanshan
  • 2012年08月22日 16:23
  • 2037

EXCEL在.NET操作下的错误System.InvalidCastException: QueryInterface for interface Excel._Application failed.

一、DCOM修复  1.运行:mmc comexp.msc /32,找到我的电脑 -> DCom配置中的Microsoft Excel Application 2.在Microsoft Excel A...
  • liuyunfan
  • liuyunfan
  • 2014年01月01日 11:59
  • 3409

IUnknown接口QueryInterface函数介绍

一、COM组件的目标:COM组件的一个主要优势是:便于升级。要实现这个优势需要满足一下两个条件:1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。2、为了更好的突出DLL的优势,还需要信息隐...
  • firststudy
  • firststudy
  • 2009年02月21日 13:30
  • 8380

IUnKNown接口——QueryInterface函数

COM笔记-QueryInterface函数 fangyukuan 2010.6.1 客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口...
  • THEONE10211024
  • THEONE10211024
  • 2013年10月30日 12:11
  • 4524

ATL是通过接口映射表来实现QueryInterface

ATL是通过接口映射表来实现QueryInterface的。 1.   从CComObject,   CComObjectCached,   CComAggObject   等中可以看出,QueryI...
  • wishfly
  • wishfly
  • 2008年01月16日 09:51
  • 2225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: QueryInterface 的实现规则
举报原因:
原因补充:

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