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));
};

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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