전 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;
}
감사합니다.
편집 -이 그냥 디버거를 사용하여 함수로 단계 수 없습니다 원격 디버그하는 기능을 가지고 있지 않는 한 내가 추가해야합니다.