佳泰生活

青山传琴韵,流水送知音

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));
};
 
阅读更多
文章标签: null
个人分类: C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭