Я никогда раньше не использовал ни COM, ни ATL, но теперь я столкнулся с кодом, который использует оба. Вызов CreateInstance в приведенном ниже коде возвращает HRESULT, который не распознан _com_error.ErrorMessage, то есть строка ошибки «неизвестная ошибка: 0x8876086c». Я немного запутался в том, какая функция на самом деле вызывается, поскольку интерфейс IClassFactory просто объявляет чисто виртуальную функцию CreateInstance, а тип _AtlComModule, 'CAtlComModule', похоже, не имеет функции-члена CreateInstance.
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;
}
Спасибо.
РЕДАКТИРОВАТЬ - я должен добавить, так как у меня нет возможности удаленной отладки, я не могу просто войти в функцию с помощью отладчика.