ken*_*nny 3 c++ windows com inheritance multiple-inheritance
我有以下COM接口层次结构和一个实现它们的类:
interface IX : public IUnknown{};
interface IY : public IUnknown{};
class CA: public IX, public IY{};
Run Code Online (Sandbox Code Playgroud)
这里class CA有效地继承了IUnknown两次.
我们知道有两个vtable指针class CA- 一个指向IX,另一个指向IY.因此IUnknown存储在IX子对象中与IUnknown存储在IY子对象中不同.
然而,当我们调用IX::QueryInterface()或IY::QueryInterface()在相同的对象和查询时,IUnknown我们得到相同的IUnknown*指针.
为什么会这样?
这就是所谓的"对象标识"要求,它规定无论何时IUnknown从两个对象请求,如果那些是不同的对象,则获得不同的指针,如果是同一个对象,则获得相同的指针.
每个QueryInterface()实现都必须满足此要求.这通常是通过选择IUnknown返回哪一个并坚持下去来完成的:
HRESULT CA::QueryInterface( REFIID iid, void** ppv )
{
if( iid == __uuidof( IUnknown ) ) {
// Explicitly cast to one of base class subobjects.
// Doesn't matter which one is chosen - it just has to be
// the same base class subobject each time IUnknown is requested.
IUnknown* selected = static_cast<IX*>( this );
*ppv = selected;
AddRef();
return S_OK;
} else {
continue for other interfaces
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |