1 //  error_handling.hpp  --------------------------------------------------------------//
2 
3 //  Copyright 2010 Vicente J. Botet Escriba
4 
5 //  Distributed under the Boost Software License, Version 1.0.
6 //  See http://www.boost.org/LICENSE_1_0.txt
7 
8 
9 #ifndef BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP
10 #define BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP
11 
12 #include <boost/detail/winapi/basic_types.hpp>
13 #include <boost/detail/winapi/GetCurrentThread.hpp>
14 
15 #ifdef BOOST_HAS_PRAGMA_ONCE
16 #pragma once
17 #endif
18 
19 namespace boost {
20 namespace detail {
21 namespace winapi {
22 
23 #if defined( BOOST_USE_WINDOWS_H )
24     using ::FormatMessageA;
25     using ::FormatMessageW;
26 
27     const int FORMAT_MESSAGE_ALLOCATE_BUFFER_= FORMAT_MESSAGE_ALLOCATE_BUFFER;
28     const int FORMAT_MESSAGE_IGNORE_INSERTS_=  FORMAT_MESSAGE_IGNORE_INSERTS;
29     const int FORMAT_MESSAGE_FROM_STRING_=     FORMAT_MESSAGE_FROM_STRING;
30     const int FORMAT_MESSAGE_FROM_HMODULE_=    FORMAT_MESSAGE_FROM_HMODULE;
31     const int FORMAT_MESSAGE_FROM_SYSTEM_=     FORMAT_MESSAGE_FROM_SYSTEM;
32     const int FORMAT_MESSAGE_ARGUMENT_ARRAY_=  FORMAT_MESSAGE_ARGUMENT_ARRAY;
33     const int FORMAT_MESSAGE_MAX_WIDTH_MASK_=  FORMAT_MESSAGE_MAX_WIDTH_MASK;
34 
35     const char LANG_NEUTRAL_=                  LANG_NEUTRAL;
36     const char LANG_INVARIANT_=                LANG_INVARIANT;
37 
38     const char SUBLANG_DEFAULT_=               SUBLANG_DEFAULT;    // user default
MAKELANGID_(WORD_ p,WORD_ s)39     inline WORD_ MAKELANGID_(WORD_ p, WORD_ s) {
40         return MAKELANGID(p,s);
41     }
42 #else
43 extern "C" {
44     //                using ::FormatMessageA;
45     __declspec(dllimport)
46     DWORD_
47     WINAPI
48     FormatMessageA(
49         DWORD_ dwFlags,
50         LPCVOID_ lpSource,
51         DWORD_ dwMessageId,
52         DWORD_ dwLanguageId,
53         LPSTR_ lpBuffer,
54         DWORD_ nSize,
55         va_list *Arguments
56         );
57 
58     //                using ::FormatMessageW;
59     __declspec(dllimport)
60     DWORD_
61     WINAPI
62     FormatMessageW(
63         DWORD_ dwFlags,
64         LPCVOID_ lpSource,
65         DWORD_ dwMessageId,
66         DWORD_ dwLanguageId,
67         LPWSTR_ lpBuffer,
68         DWORD_ nSize,
69         va_list *Arguments
70         );
71 
72     const int FORMAT_MESSAGE_ALLOCATE_BUFFER_= 0x00000100;
73     const int FORMAT_MESSAGE_IGNORE_INSERTS_=  0x00000200;
74     const int FORMAT_MESSAGE_FROM_STRING_=     0x00000400;
75     const int FORMAT_MESSAGE_FROM_HMODULE_=    0x00000800;
76     const int FORMAT_MESSAGE_FROM_SYSTEM_=     0x00001000;
77     const int FORMAT_MESSAGE_ARGUMENT_ARRAY_=  0x00002000;
78     const int FORMAT_MESSAGE_MAX_WIDTH_MASK_=  0x000000FF;
79 
80     const char LANG_NEUTRAL_=                  0x00;
81     const char LANG_INVARIANT_=                0x7f;
82 
83     const char SUBLANG_DEFAULT_=               0x01;    // user default
84     inline WORD_ MAKELANGID_(WORD_ p, WORD_ s) {
85         return ((((WORD_  )(s)) << 10) | (WORD_  )(p));
86     }
87 
88 }
89 #endif
90 }
91 }
92 }
93 #endif // BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP
94