2012-03-26 6 views
0

전 COM 또는 ATL을 사용하지 않았지만 이제는 둘 다 사용하는 코드에 직면합니다. 아래 코드에서 CreateInstance를 호출하면 _com_error.ErrorMessage에서 인식 할 수없는 HRESULT가 반환됩니다. 즉, 오류 문자열은 "알 수없는 오류 : 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이므로 문제의 근본 원인은 COM 또는 ATL이 아닌 Direct3D와 관련이 있습니다. 이 문제를 더 해결하려면이 코드를 사용하여 정확히 COM 개체가 실패했는지 확인하기 위해 거기에서 사용중인 CLSID 및 IID 인수를 확인해야합니다.

관련 문제