QueryInterface 的实现规则

本节将给出一些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));
};
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值