假设我有一个实现两个或多个 COM 接口的类:
class CMyClass : public IInterface1, public IInterface2 {
};
我看到的几乎所有文档都表明,当我为 IUnknown 实现 QueryInterface() 时,我明确地将这个指针向上转换为一个接口:
if( iid == __uuidof( IUnknown ) ) {
*ppv = static_cast<IInterface1>( this );
//call Addref(), return S_OK
}
问题是为什么我不能复制这个?
if( iid == __uuidof( IUnknown ) ) {
*ppv = this;
//call Addref(), return S_OK
}
文档通常说,如果我这样做,我将违反对同一对象的任何 QueryInterface() 调用必须返回完全相同的值的要求。
我不太明白。它们是否意味着如果 IInterface2 的 I QI() 并通过该指针 C++ 调用 QueryInterface() 将传递这个与 IInterface2 的 I QI() 略有不同,因为 C++ 每次都会将此指向子对象?