2012-03-26 107 views
0

我從來沒有使用COM或ATL之前,但現在我面臨使用兩個代碼。在下面的代碼中對CreateInstance的調用返回了一個HRESULT,它不被_com_error.ErrorMessage識別,即錯誤字符串是「unknown error:0x8876086c」。我對於實際被調用的函數有點困惑,因爲IClassFactory接口只聲明瞭一個純虛函數CreateInstance,並且_AtlComModule類型'CAtlComModule'似乎沒有CreateInstance成員函數。實例化一個COM和ATL類型

STDMETHODIMP CGdtvEngine::CoCreateInstance(const CLSID &clsid, const IID &iid, void **obj) 
{ 
    CComPtr <IClassFactory> factory; 
    HRESULT hr = AtlComModuleGetClassObject(&_AtlComModule, clsid, __uuidof(factory), (void **)&factory); 
    _com_error err1(hr); 
    Log(_T("Result of AtlComModuleGetClassObject: %s"), err1.ErrorMessage(); 
    hr = factory->CreateInstance(NULL, iid, obj); 
    _com_error err2(hr); 
    Log(_T("Result of factory->CreateInstance: %s"), err2.ErrorMessage()); 
    return hr; 
} 

謝謝。

編輯 - 我要補充,因爲我沒有能力遠程調試這個我不能只是步入使用調試器的功能。

回答

1

0x8876086cD3DERR_INVALIDCALL所以這個問題的根本原因很可能與Direct3D相關,而不是COM或ATL。要進一步解決這個問題,您需要查看您在那裏使用的CLSID和IID參數,以便查看究竟哪個COM對象失敗。