关于接口指针转换的实现的疑问
问题在代码中注释处:
class IUnknown{
public:
virtual long AddRef()=0;
virtual long Release()=0;
virtual HRESULT QueryInterface(const IID& iid, void **ppv)=0;
};
class IA:public IUnknown{
public:
virtual void funcA()=0;
};
class IB:public IUnknown{
public:
virtual void funcB()=0;
};
class MyCoClass: public IA, public IB{
private:
long m_nRef;
public:
MyCoClass(){m_nRef=0}
~MyCoClass(){}
long AddRef();
long Release();
HRESULT QueryInterface(const IID& iid, void **ppv);
void funcA(){}
void funcB(){}
};
long MyCoClass::AddRef()
{
m_nRef++;
return m_nRef;
}
long MyCoClass::Release()
{
m_nRef--;
if( 0 == m_nRef ){
delete this;
return 0;
}
return m_nRef;
}
HRESULT MyCoClass::QueryInterface(const IID& iid, void **ppv)
{
if( IID_IUnknown == iid){
*ppv = (IUnknown*)this;
(*IUnknown)(*ppv)->AddRef();
}
else if( IID_IA == iid ){
*ppv = (IA*)this; //请问这里的转换是怎么实现的
(*IA)(*ppv)->AddRef();
}
else if( IID_IB == iid ){
*ppv = (IB*)this; //请问这里的转换是怎么实现的
(*IB)(*ppv)->AddRef();
}
else{
*ppv = NULL;
return E_NOINTERFACE;
}
return S_OK;
}
我还有两个贴,希望大家帮忙看看 谢谢
http://community.csdn.net/Expert/topic/4810/4810321.xml?temp=.5512506
http://community.csdn.net/Expert/topic/4810/4810348.xml?temp=.4504206