khk*_*ens 56 c++ windows clr winapi hresult
win API中是否有一个函数可用于提取HRESULT值的字符串表示形式?
问题是并非所有返回值都记录在MSDN中,例如,ExecuteInDefaultAppDomain()函数未记录为返回"0x80070002 - 系统找不到指定的文件."但是,确实如此!因此,我想知道是否有一个常用的功能.
era*_*ran 82
你可以使用_com_error:
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
Run Code Online (Sandbox Code Playgroud)
如果您不想_com_error
出于任何原因使用它,您仍然可以查看其来源,并了解它是如何完成的.
不要忘记包含标题 comdef.h
Sim*_*ier 14
Windows API就是FormatMessage.以下是解释如何执行此操作的链接:如何使用FormatMessage API获取错误消息说明.
对于Win32消息(HRESULT以0x8007开头的消息,即FACILITY_WIN32),您需要删除hi命令字.例如,在0x80070002中,您需要使用0x0002调用FormatMessage.
但是,它并不总是适用于任何类型的消息.对于某些特定的消息(特定于技术,供应商等),您需要加载相应的资源DLL,这并不总是一件容易的事,因为您需要找到此DLL.
从c ++ 11开始,此功能已内置到标准库中:
#include <system_error>
std::string message = std::system_category().message(hr)
Run Code Online (Sandbox Code Playgroud)