描述:
主要代码如下:
interface IX: IUnknown
{
virtual void __stdcall Fx() = 0;
};
interface IY: IUnknown
{
virtual void __stdcall Fy() = 0;
};
interface IZ: IUnknown
{
virtual void __stdcall Fz() = 0;
};
class CA : public IX, public IY
{
private:
virtual HRESULT __stdcall QueryInterface( const IID& iid, void** ppv );
virtual ULONG __stdcall Release() { return 0; }
virtual ULONG __stdcall AddRef() { return 0; }
virtual void __stdcall Fx() { cout << "Fx" << endl; }
virtual void __stdcall Fy() { cout << "Fy" << endl; }
};
HRESULT CA::QueryInterface( const IID& iid, void** ppv )
{
if( iid == IID_IUnknown ) {
trace( "QueryInterface: Return Pointer to IUnKnown!" );
cout << *ppv << endl ;
*ppv = static_cast<IX*>( this );
cout << *ppv << endl << this << endl;
}
else if( iid == IID_IX ) {
trace( "QueryInterface: Return Pointer to IX!" );
cout << *ppv << endl;
*ppv = static_cast<IX*>( this );
cout << *ppv << endl << this << endl ;
}
else if( iid == IID_IY ) {
trace( "QueryInterface: Return Pointer to IY!" );
cout << *ppv << endl;
*ppv = static_cast<IY*>( this );
cout << *ppv << endl << this << endl ;
}
else {
trace( "QueryInterface: Interface not support!" );
*ppv = NULL;
return E_NOINTERFACE;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return S_OK;
}
IUnknown * CreateInstance()
{
CA* pA = new CA;
IUnknown* PI = static_cast<IX*>( pA );
cout << pA << endl;
PI->AddRef();
return PI;
}
hr = pIX->QueryInterface( IID_IY, (void**) &pIyFromIx ); // 能转
为什么下面的转不了, 不都是一样的吗?当然不用能这个reinterpret_cast转
IY *pIyFromIx = NULL;
pIyFromIx = static_cast<IX*>(pIX); // 转不了
pIyFromIx->Fy();
cout << "---------------------" << endl;