Используйте FormatMessage , чтобы получить текст ошибки - он уже знает, как искать локализованный текст для большинства кодов HRESULT и Win32.
Используйте макросы FAILED
и SUCCEEDED
, чтобы определить, сработало ли что-то или нет.
exit
принимает 32-битные числа. Вы можете использовать HRESULT в качестве кода завершения процесса:
HRESULT hr;
if (FAILED(hr = p->QueryInterface(...)))
{
cerr << MessageFromHResult(hr); // left as an exercise for the reader
exit(hr);
}