| 49 | | { |
|---|
| 50 | | private import std.c.windows.windows; |
|---|
| 51 | | |
|---|
| 52 | | static uint FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100; |
|---|
| 53 | | static uint FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; |
|---|
| 54 | | static uint FORMAT_MESSAGE_FROM_STRING = 0x00000400; |
|---|
| 55 | | static uint FORMAT_MESSAGE_FROM_HMODULE = 0x00000800; |
|---|
| 56 | | static uint FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; |
|---|
| 57 | | static uint FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000; |
|---|
| 58 | | static uint FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF; |
|---|
| 59 | | |
|---|
| 60 | | WORD MAKELANGID(WORD p, WORD s) { return (((cast(WORD)s) << 10) | cast(WORD)p); } |
|---|
| 61 | | WORD PRIMARYLANGID(WORD lgid) { return (cast(WORD)lgid & 0x3ff); } |
|---|
| 62 | | WORD SUBLANGID(WORD lgid) { return (cast(WORD)lgid >> 10); } |
|---|
| 63 | | |
|---|
| 64 | | alias HGLOBAL HLOCAL; |
|---|
| 65 | | |
|---|
| 66 | | static uint LANG_NEUTRAL = 0x00; |
|---|
| 67 | | static uint SUBLANG_DEFAULT = 0x01; |
|---|
| 68 | | |
|---|
| 69 | | extern (Windows) |
|---|
| 70 | | { |
|---|
| 71 | | DWORD FormatMessageA (DWORD dwFlags, |
|---|
| 72 | | LPCVOID lpSource, |
|---|
| 73 | | DWORD dwMessageId, |
|---|
| 74 | | DWORD dwLanguageId, |
|---|
| 75 | | LPTSTR lpBuffer, |
|---|
| 76 | | DWORD nSize, |
|---|
| 77 | | LPCVOID args |
|---|
| 78 | | ); |
|---|
| 79 | | |
|---|
| 80 | | HLOCAL LocalFree(HLOCAL hMem); |
|---|
| | 57 | { |
|---|
| | 58 | private import std.c.windows.windows; |
|---|
| | 59 | |
|---|
| | 60 | static uint FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100; |
|---|
| | 61 | static uint FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; |
|---|
| | 62 | static uint FORMAT_MESSAGE_FROM_STRING = 0x00000400; |
|---|
| | 63 | static uint FORMAT_MESSAGE_FROM_HMODULE = 0x00000800; |
|---|
| | 64 | static uint FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; |
|---|
| | 65 | static uint FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000; |
|---|
| | 66 | static uint FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF; |
|---|
| | 67 | |
|---|
| | 68 | WORD MAKELANGID(WORD p, WORD s) { return (((cast(WORD)s) << 10) | cast(WORD)p); } |
|---|
| | 69 | WORD PRIMARYLANGID(WORD lgid) { return (cast(WORD)lgid & 0x3ff); } |
|---|
| | 70 | WORD SUBLANGID(WORD lgid) { return (cast(WORD)lgid >> 10); } |
|---|
| | 71 | |
|---|
| | 72 | alias HGLOBAL HLOCAL; |
|---|
| | 73 | |
|---|
| | 74 | static uint LANG_NEUTRAL = 0x00; |
|---|
| | 75 | static uint SUBLANG_DEFAULT = 0x01; |
|---|
| | 76 | |
|---|
| | 77 | extern (Windows) |
|---|
| | 78 | { |
|---|
| | 79 | DWORD FormatMessageA (DWORD dwFlags, |
|---|
| | 80 | LPCVOID lpSource, |
|---|
| | 81 | DWORD dwMessageId, |
|---|
| | 82 | DWORD dwLanguageId, |
|---|
| | 83 | LPTSTR lpBuffer, |
|---|
| | 84 | DWORD nSize, |
|---|
| | 85 | LPCVOID args |
|---|
| | 86 | ); |
|---|
| | 87 | |
|---|
| | 88 | HLOCAL LocalFree(HLOCAL hMem); |
|---|
| 294 | | LPVOID lpMsgBuf; |
|---|
| 295 | | |
|---|
| 296 | | r = FormatMessageA ( |
|---|
| 297 | | FORMAT_MESSAGE_ALLOCATE_BUFFER | |
|---|
| 298 | | FORMAT_MESSAGE_FROM_SYSTEM | |
|---|
| 299 | | FORMAT_MESSAGE_IGNORE_INSERTS, |
|---|
| 300 | | null, |
|---|
| 301 | | errcode, |
|---|
| 302 | | MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language |
|---|
| 303 | | cast(LPTSTR)&lpMsgBuf, |
|---|
| 304 | | 0, |
|---|
| 305 | | null); |
|---|
| 306 | | |
|---|
| 307 | | /* Remove \r\n from error string */ |
|---|
| 308 | | if (r >= 2) r-= 2; |
|---|
| 309 | | text = (cast(char *)lpMsgBuf)[0..r].dup; |
|---|
| 310 | | LocalFree(cast(HLOCAL)lpMsgBuf); |
|---|
| 311 | | } |
|---|
| 312 | | else |
|---|
| 313 | | { |
|---|
| | 302 | LPVOID lpMsgBuf; |
|---|
| | 303 | |
|---|
| | 304 | r = FormatMessageA ( |
|---|
| | 305 | FORMAT_MESSAGE_ALLOCATE_BUFFER | |
|---|
| | 306 | FORMAT_MESSAGE_FROM_SYSTEM | |
|---|
| | 307 | FORMAT_MESSAGE_IGNORE_INSERTS, |
|---|
| | 308 | null, |
|---|
| | 309 | errcode, |
|---|
| | 310 | MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language |
|---|
| | 311 | cast(LPTSTR)&lpMsgBuf, |
|---|
| | 312 | 0, |
|---|
| | 313 | null); |
|---|
| | 314 | |
|---|
| | 315 | /* Remove \r\n from error string */ |
|---|
| | 316 | if (r >= 2) r-= 2; |
|---|
| | 317 | text = (cast(char *)lpMsgBuf)[0..r].dup; |
|---|
| | 318 | LocalFree(cast(HLOCAL)lpMsgBuf); |
|---|
| | 319 | } |
|---|
| | 320 | else |
|---|
| | 321 | { |
|---|