1 // Windows/Error.h 2 3 #include "StdAfx.h" 4 5 #include "Windows/Error.h" 6 #ifndef _UNICODE 7 #include "Common/StringConvert.h" 8 #endif 9 10 #ifndef _UNICODE 11 extern bool g_IsNT; 12 #endif 13 14 namespace NWindows { 15 namespace NError { 16 17 bool MyFormatMessage(DWORD messageID, CSysString &message) 18 { 19 LPVOID msgBuf; 20 if (::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 21 FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 22 NULL,messageID, 0, (LPTSTR) &msgBuf,0, NULL) == 0) 23 return false; 24 message = (LPCTSTR)msgBuf; 25 ::LocalFree(msgBuf); 26 return true; 27 } 28 29 #ifndef _UNICODE 30 bool MyFormatMessage(DWORD messageID, UString &message) 31 { 32 if (g_IsNT) 33 { 34 LPVOID msgBuf; 35 if (::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | 36 FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 37 NULL, messageID, 0, (LPWSTR) &msgBuf, 0, NULL) == 0) 38 return false; 39 message = (LPCWSTR)msgBuf; 40 ::LocalFree(msgBuf); 41 return true; 42 } 43 CSysString messageSys; 44 bool result = MyFormatMessage(messageID, messageSys); 45 message = GetUnicodeString(messageSys); 46 return result; 47 } 48 #endif 49 50 }} 51