30.04.2004 10:47:40Ошибка при выполнении CoCreateInstance Ответов: 2
Альберт
Пишу генератор запросов для сохранения их на диске на С++ (MFC). Функция CoCreateInstance в hr выдаёт "Требуемый класс отсутствует в ClassFactory". Подскажите, в чём ошибка. Код из MSDN:

ICEnroll4 * pEnroll = NULL;
ICertRequest2 * pRequest = NULL;
BSTR bstrDN = NULL;
BSTR bstrOID = NULL;
BSTR bstrFileName = NULL;
BSTR bstrReq = NULL;
BSTR bstrAttrib = NULL;
// long nDisp;
HRESULT hr;

// Initialize COM.
hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
// Check status.
if ( FAILED( hr ) )
{
AfxMessageBox("Failed CoInitializeEx");
goto error;
}
// Create an instance of the Certificate Enrollment object.
hr = CoCreateInstance( CLSID_CEnroll,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICEnroll4,
(void **)&pEnroll);
// Check status.
if ( FAILED( hr ) )
{
AfxMessageBox("Failed CoCreateInstance - pEnroll");
goto error;
}
 
Ответы:
30.04.2004 15:05:40Юрий
Вот работающий код, правда на ATL (но сейчас MFC и ATL можно использовать совместно):

CComPtr<ICEnroll4> pEnroll;
hr = CoCreateInstance( CLSID_CEnroll, NULL, CLSCTX_INPROC_SERVER, IID_ICEnroll4, (void **)&pEnroll);
if(FAILED(hr))
{
::MessageBox(NULL,_T("No CEnroll!"),_T("Error"),MB_OK | MB_ICONINFORMATION);
return hr;
}

30.04.2004 15:43:27Альберт
Использовал другой, заведомо рабочий генератор - та же ошибка. Переставляю систему.