错误报告为 HRESULT 值

HRESULT 是数字 32 位值,其中位或位范围编码定义良好的信息。MSB 是失败/成功标志,其余位存储附加信息。可以使用 FAILEDSUCCEEDED 宏来确定失败或成功。HRESULTs 通常与 COM 一起使用,但也出现在非 COM 实现中(例如 StringCchPrintf )。

const size_t cchBuf = 5;
wchar_t buffer[cchBuf] = { 0 };
HRESULT hr = StringCchPrintfW( buffer, cchBuf, L"%s", L"Hello, world!" );
if ( FAILED( hr ) ) {
    // Failure: Determine specific reason.
    switch ( hr ) {
    case STRSAFE_E_INSUFFICIENT_BUFFER:
        // Buffer too small; increase buffer and retry.
        ...
    case STRSAFE_E_INVALID_PARAMETER:
        // Invalid parameter; implement custom error handling (e.g. logging).
        ...
    default:
        // Some other error code; implement custom error handling (e.g. logging).
        ...
    }
}