QueryInterface 的实现规则

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

大家好,又见面了,我是你们的朋友全栈君。

本节将给出一些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));
};

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162911.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • excel列中相同字符串统计_输入一串字符统计出现次数

    excel列中相同字符串统计_输入一串字符统计出现次数https://jingyan.baidu.com/article/6d704a132ea17328da51ca78.html通过excel快速统计一列中相同字符的个数,如果很少,你可以一个一个数、

    2022年8月1日
    1
  • pycharm输入不了中文_pycharm可以设置成中文吗

    pycharm输入不了中文_pycharm可以设置成中文吗ubuntu18.04中PyCharm当全拼输入2~3个汉字时,会被强行打断,然后就无法继续输入(也无法切换中英文),并且汉字下会有下划线。点击菜单“Help|EditCustomVMoptions…”添加-Drecreate.x11.input.method=true到最后一行重启编辑器…

    2022年8月28日
    0
  • ARM的中断向量表,及DCD伪指令

    ARM的中断向量表,及DCD伪指令当中断或异常发生的时候,CPU自动将PC指向一个特定的地址,这个地址就是中断向量表。在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。例如: IRQEntryBHandleIRQ;跳转范围较小 LDRPC,=HandleFIQ   ;LDR伪指令等效生成1条存储读取指令和1条32位常数定义

    2022年10月29日
    0
  • mac时间机器删除旧备份

    mac时间机器删除旧备份

    2021年5月14日
    111
  • VS2008安装失败!Microsoft Visual Studio Web 创作组件

    VS2008安装失败!Microsoft Visual Studio Web 创作组件解决方案一:找到Office2007的安装文件第一步:因为除VisualStudio本身以外,VS安装过程中安装的其他附带安装的组件,基本上都是有单独安装包的。先找到VisualStudio

    2022年7月3日
    23
  • Ink笔记_ink correction

    Ink笔记_ink correction最近想要复刻一下稚晖君的小卡片,因此来学习一下。1.ST25DV作为NFC的PHY通过I2C总线和STM32通信,主要作用有两个:能量采集以及NFC通信。注意,ST25DV只是负责和手机进行NFC通信,而不负责IC卡的读写功能,因为ST25DV只支持ISO15693的RFID协议,而我们常用的IC卡(M1卡)是ISO14443协议的,所以并不能直接使用这颗芯片进行IC卡模拟。2.IC卡的模拟功能这一版中实现得比较简单,就是直接集成了多颗UID芯片(很便宜,1~2元一片),然后和ST25DV共用N

    2022年10月30日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号