По сути, все находится внутри '‹winerror.h›'. Но у меня такое чувство, что это может быть непопулярным ответом.
Контекст
HRESULT — это дескриптор (значение типа long), возвращаемый из Win32, COM и других функций в огромном океане Windows SDK. Что и как упаковано в этой ручке, объясняется в <winerror.h>
Я осмелюсь предположить, что есть один факт о Win32, очень полезный для разработчиков C++.
Win32 написана на C
Таким образом, исключений C++ нет. То же самое HRESULT — ваш друг. Существуют специальные исключения, называемые SEH (обработка структурированных исключений). И они встроены в винду. Даже MS STL использует SEH, когда исключения C++ отключены (ох!). Но это не было частью вопроса.
Использование выглядит очень просто:
HRESULT hr ;
ULONG ansi_size_ ;
hr = DiscpUnicodeToAnsiSize(L"Look Ma, I am doing WIN32!", &ansi_size_ );
if ( FAILED(hr) ) {
// there was some error
// what exactly has happened?
HRESULT facility = HRESULT_FACILITY(hr);
HRESULT severity = HRESULT_SEVERITY(hr);
// we can for example look for a particular facility
if ( facility == FACILITY_MSMQ)
{
// hey, just what is MSMQ ?!
// let see the code part
HRESULT code = HRESULT_CODE(hr);
}
}
<winerror.h>
(в настоящее время) состоит из 62238 строк. Не стесняйтесь просматривать его, и вы найдете много полезных самородков.
статья о HRESULT на самом деле короткая и точная.
Win32 уже несколько десятилетий. Неизбежно есть пыльные углы. Но HRESULT останется навсегда и будет активно развиваться.
Как это происходит, протокол кодов ошибок Windows, редакция 20 (вздох) ="nofollow noreferrer">был выпущен только вчера!
Но это C!?
Было выпущено несколько официальных проектов (также выпущенных) для инкапсуляции HRESULT и COM в типы C++. MFC, ATL... Мне больше всего нравится Поддержка компилятора COM и, в частности, _com_error.
Надеюсь, это помогло...
person
Chef Gladiator
schedule
09.04.2021
<WinError.h>
, или используйтеMAKE_HRESULT
для создания собственных кодов ошибок. - person selbie   schedule 02.02.2020