C++ 如何将HRESULT转换为错误描述?

C++ 如何将HRESULT转换为错误描述?,c++,windows,winapi,hresult,C++,Windows,Winapi,Hresult,比方说,如果我有一个WinAPI,它使用HRESULT代码失败。有没有办法将其转换为错误描述字符串?这是我们内部使用的帮助函数,用于从HRESULT中提取Win32错误代码: DWORD Win32FromHResult(HRESULT hr) { if ((hr & 0xFFFF0000) == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, 0)) { return HRESULT_CODE(hr);

比方说,如果我有一个WinAPI,它使用
HRESULT
代码失败。有没有办法将其转换为错误描述字符串?

这是我们内部使用的帮助函数,用于从HRESULT中提取Win32错误代码:

DWORD Win32FromHResult(HRESULT hr)
{
    if ((hr & 0xFFFF0000) == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, 0))
    {
        return HRESULT_CODE(hr);
    }

    if (hr == S_OK)
    {
        return ERROR_SUCCESS;
    }

    // Not a Win32 HRESULT so return a generic error code.
    return ERROR_CAN_NOT_COMPLETE;
}

然后,您可以使用
FormatMessage
将其转换为字符串形式。

对于许多代码,您可以执行
FormatMessage
,有些代码无法获取文本,有些代码甚至重叠(具有API特定含义的相同代码-请参阅)。因此,没有简单的答案。或者,您可以将问题缩小到您感兴趣的特定API。快速的谷歌搜索会为您提供帮助。是的,
\u com\u error
似乎也是这样做的方法。谢谢有趣的是,它在内部使用
HRESULT
上的
FormatMessage
,就像它是
GetLastError
中的错误代码一样。隐马尔可夫模型。