1 目的

按照COM规范,一个COM对象可以实现多个接口。从一个接口到另一个接口的访问途径

2 QueryInterface实现

image.png

  1. class CDictionary : public IDictionary , public ISpellCheck
  2. {
  3. public :
  4. CDictionary();
  5. ~CDictionary();
  6. public :
  7. // IUnknown member function
  8. virtual HRESULT QueryInterface(const IID& iid, void **ppv) ;
  9. virtual ULONG AddRef() ;
  10. virtual ULONG Release() ;
  11. // ......
  12. private :
  13. int m_Ref ;
  14. // ......
  15. };

3 接口查询用法示例

函数QueryInterface(iid, ppv)
用法:初始得到了一个接口指针之后,调用它的QueryInterface函数,获得另一个接口指针
返回值: 说明了对象对接口的支持情况, S_OK、E_NOINTERFACE、E_UNEXPECTED

  1. retValue = pIDictionary->LoadLibrary("eng_ch.dict");
  2. if (retValue == FALSE) {
  3. pIDictionary->Release();
  4. return;
  5. }
  6. // ...
  7. ISpellCheck *pISpellCheck;
  8. HRESULT result = pIDictionary->QueryInterface(IID_SpellCheck, (void **) &pISpellCheck);
  9. if (result != S_OK) {
  10. pIDictionary->Release();
  11. return;
  12. }
  13. // ...... use interface pISpellCheck
  14. // finally, release dictionary object
  15. pIDictionary->Release();
  16. pISpellCheck->Release();
  17. // ...