1 目的
按照COM规范,一个COM对象可以实现多个接口。从一个接口到另一个接口的访问途径
2 QueryInterface实现
class CDictionary : public IDictionary , public ISpellCheck
{
public :
CDictionary();
~CDictionary();
public :
// IUnknown member function
virtual HRESULT QueryInterface(const IID& iid, void **ppv) ;
virtual ULONG AddRef() ;
virtual ULONG Release() ;
// ......
private :
int m_Ref ;
// ......
};
3 接口查询用法示例
函数QueryInterface(iid, ppv)
用法:初始得到了一个接口指针之后,调用它的QueryInterface函数,获得另一个接口指针
返回值: 说明了对象对接口的支持情况, S_OK、E_NOINTERFACE、E_UNEXPECTED
retValue = pIDictionary->LoadLibrary("eng_ch.dict");
if (retValue == FALSE) {
pIDictionary->Release();
return;
}
// ...
ISpellCheck *pISpellCheck;
HRESULT result = pIDictionary->QueryInterface(IID_SpellCheck, (void **) &pISpellCheck);
if (result != S_OK) {
pIDictionary->Release();
return;
}
// ...... use interface pISpellCheck
// finally, release dictionary object
pIDictionary->Release();
pISpellCheck->Release();
// ...