List 2-9 QueryInterfaceメソッドの実装

  1: HRESULT __stdcall CDictionary::QueryInterface(REFIID riid, void** ppvObj) 
  2: { 
  3:     if (IsEqualIID(riid ,IID_IUnknown)) 
  4:         // Unknownインタフェースのアドレスを*ppvObjポインタに設定する
  5:         *ppvObj = static_cast(this);
  6:     else if(IsEqualIID(riid ,IID_IDictionary))
  7:         // Dictionaryインタフェースのアドレスを*ppvObjポインタに設定する
  8:         *ppvObj = this;
  9:     else
 10:     {
 11:         // インタフェースが見つからない場合
 12:         *ppvObj = NULL;
 13:         return E_NOINTERFACE;
 14:     }
 15:     // インタフェースが見つかったときには参照カウントを増やす
 16:     AddRef();
 17:     return S_OK;
 18: }