【发布时间】:2010-12-17 01:44:46
【问题描述】:
假设我的 COM 对象实现了两个或多个 COM 接口:
class CMyClass : public IPersistFile, public IPersistStream {
};
在实现 QueryInterface() 时,我需要能够返回一个 IUnknown* 指针。由于这两个基本接口都是从 IUnknown 派生的,因此我不能隐式向上转换 - 这样的向上转换将是模棱两可的。要明确地向上转换,我需要使用以下两种方式之一:
if( iid == __uuidof( IUnknown ) ) {
*ppv = static_cast<IPersistFile*>( this );
static_cast<IPersistFile*>( this )->AddRef();
return S_OK;
}
或
if( iid == __uuidof( IUnknown ) ) {
*ppv = static_cast<IPersistStream*>( this );
static_cast<IPersistStream*>( this )->AddRef();
return S_OK;
}
看起来唯一的要求是,每当对一个对象调用 QI() 时,它每次都返回相同的指针,如果我选择任何强制转换并坚持下去,我就满足了这个要求。
我应该选择哪种向上转型以及为什么?
【问题讨论】:
标签: c++ windows visual-c++ com