2012-03-26 91 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对象失败。