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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 自动化测试之超厉害自动化录制工具介绍

    自动化测试之超厉害自动化录制工具介绍

    2021年9月17日
    152
  • javaScript-touch事件详解(touchstart、touchmove和touchend)-滑动事件案例

    javaScript-touch事件详解(touchstart、touchmove和touchend)-滑动事件案例HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。一开始触摸事件touchstart、touchmove和touchend是iOS版Safari浏览器为了向开发人员传达一些信息新添加的事件。因为ios设备既没有鼠标也没有键盘,所以在为移动Safari浏览器开发交互性网页的时候,PC端

    2022年6月19日
    23
  • 使用Python检测符号及乱码字符

    使用Python检测符号及乱码字符最近在进行关键词的分析,中间涉及到对一些特殊的字符进行过滤的需求。包括带符号的(有部分还是SQL注入),并且存在一部分乱码的问题。梳理下来供后续使用。检测字符串是否包含特殊符号方案一:通过字符匹配的方式进行判定defif_contain_symbol(keyword):symbols=”~!@#$%^&*()_+-*/<>,.[]\/”forsymbolinsymbols:ifsymbolinkeyword:

    2022年5月4日
    45
  • Java学习路线图(2020最新版)

    Java学习路线图(2020最新版)第一阶段:Java基础学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础、编程基础语法,面向对象,集合、IO流、线程、并发、异常及网络编程,这些我们称之为JavaSE基础。当你掌握了这些内容之后,你就可以做出诸如:电脑上安装的迅雷下载软件、QQ聊天客户端、考勤管理系统等桌面端软件。第二阶段:数据库互联网最具价值的是数据,任何编程语言都需要解决数据存储问题,而数据存储的关键技术是数据库。MySQL和Oracle都是广受企业欢迎的数据库管理系统。Java

    2022年5月13日
    60
  • s一般怎么称呼自己的m_上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力?…

    s一般怎么称呼自己的m_上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力?…上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力,学平面设计能干什么?很多人以为学习平面设计专业的话,毕了业只是做海报、设计广告而已。后来才发现,平面设计专业,其实有很多有意义的行业。就在上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力来分享下自己的经验。平面设计是任何企业和公司都不可缺少的岗位之一,位置至关重要。而且大街上随处可见平面设计的踪影,海报、产品包装、路标指示牌、l…

    2022年6月23日
    46
  • JavaScript:三目运算符

    JavaScript:三目运算符HELLO大家好!三目运算符是一个非常简单且使用的运算符。是由两个运算符连接的三个操作数据或者表达式条件表达式?表达式1:表达式0当条件表达式为true则选择表达式1,反之false则选择表达式0举个栗子varage=15;console.log(age<18?’未成年’:’成年’);结果为:···本人写博客就是想记录一下自己所学的知识(目前正在学习中),巩固知识加深记忆,也顺便分享一下自己的所学,有什么地方写的不对,希望大家可以多多指出,让我及时改正。如果我分享的

    2022年6月17日
    34

发表回复

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

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