// Windows/ErrorMsg.h | |
#include "StdAfx.h" | |
#ifndef _UNICODE | |
#include "../Common/StringConvert.h" | |
#endif | |
#include "ErrorMsg.h" | |
#ifndef _UNICODE | |
extern bool g_IsNT; | |
#endif | |
namespace NWindows { | |
namespace NError { | |
static bool MyFormatMessage(DWORD errorCode, UString &message) | |
{ | |
LPVOID msgBuf; | |
#ifndef _UNICODE | |
if (!g_IsNT) | |
{ | |
if (::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | | |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, | |
NULL, errorCode, 0, (LPTSTR) &msgBuf, 0, NULL) == 0) | |
return false; | |
message = GetUnicodeString((LPCTSTR)msgBuf); | |
} | |
else | |
#endif | |
{ | |
if (::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | | |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, | |
NULL, errorCode, 0, (LPWSTR) &msgBuf, 0, NULL) == 0) | |
return false; | |
message = (LPCWSTR)msgBuf; | |
} | |
::LocalFree(msgBuf); | |
return true; | |
} | |
UString MyFormatMessage(DWORD errorCode) | |
{ | |
UString message; | |
if (!MyFormatMessage(errorCode, message)) | |
{ | |
wchar_t s[16]; | |
for (int i = 0; i < 8; i++) | |
{ | |
unsigned t = errorCode & 0xF; | |
errorCode >>= 4; | |
s[7 - i] = (wchar_t)((t < 10) ? ('0' + t) : ('A' + (t - 10))); | |
} | |
s[8] = '\0'; | |
message = (UString)L"Error #" + s; | |
} | |
return message; | |
} | |
}} |