有没有办法使用win API获取HRESULT值的string表示?

win API中有没有函数可以用来提取HRESULT值的string表示?

问题是不是所有的返回值都logging在MSDN中,例如ExecuteInDefaultAppDomain()函数没有logging为返回“0x80070002 – 系统找不到指定的文件”,但是,它确实! 因此,我想知道是否有一个常用的function。

你可以使用_com_error :

_com_error err(hr); LPCTSTR errMsg = err.ErrorMessage(); 

如果你不想因为什么原因使用_com_error ,你仍然可以看看它的源头,看看它是如何完成的。

不要忘记包含头comdef.h

Windows API是FormatMessage 。 以下链接介绍了如何执行此操作: 如何使用FormatMessage API获取错误消息描述 。

对于Win32消息(HRESULT以0x8007开头的消息,即FACILITY_WIN32),您需要删除hi命令字。 例如在0x80070002中,您需要使用0x0002调用FormatMessage。

但是,它并不总是适用于任何types的消息。 对于一些特定的消息(特定于技术,供应商等),您需要加载相应的资源DLL,这并不总是一件容易的事情,因为您需要find这个DLL。

这是一个使用FormatMessage()的示例

 LPTSTR SRUTIL_WinErrorMsg(int nErrorCode, LPTSTR pStr, WORD wLength ) { try { LPTSTR szBuffer = pStr; int nBufferSize = wLength; // // prime buffer with error code // wsprintf( szBuffer, _T("Error code %u"), nErrorCode); // // if we have a message, replace default with msg. // FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, nErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) szBuffer, nBufferSize, NULL ); } catch(...) { } return pStr; } // End of SRUTIL_WinErrorMsg()