//Returns the last Win32 error, in string format. Returns an empty string if there is no error.
#ifdef UNICODE
std::wstring GetSysError(DWORD errCode)
#else
std::string GetSysError(DWORD errCode)
#endif
{
DWORD errorMessageID = errCode;
TCHAR* messageBuffer = nullptr;
size_t size = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
errorMessageID,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(TCHAR *)&messageBuffer,
0,
NULL);
#ifdef UNICODE
std::wstring message(messageBuffer, size);
#else
std::string message(messageBuffer, size);
#endif
//Free the buffer.
LocalFree(messageBuffer);
return message;
转载于:https://my.oschina.net/3cwYg4/blog/2987983