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 
MyFormatMessage(DWORD messageID,CSysString & message)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
MyFormatMessage(DWORD messageID,UString & message)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