2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2015 Andrey Semashev
4 * Copyright 2016 Jorge Lodos
6 * Distributed under the Boost Software License, Version 1.0.
7 * See http://www.boost.org/LICENSE_1_0.txt
10 #ifndef BOOST_WINAPI_ERROR_HANDLING_HPP_INCLUDED_
11 #define BOOST_WINAPI_ERROR_HANDLING_HPP_INCLUDED_
14 #include <boost/winapi/basic_types.hpp>
15 #include <boost/winapi/get_last_error.hpp>
17 #ifdef BOOST_HAS_PRAGMA_ONCE
21 #if !defined( BOOST_USE_WINDOWS_H )
23 #if !defined( BOOST_NO_ANSI_APIS )
24 BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ WINAPI
26 boost::winapi::DWORD_ dwFlags,
27 boost::winapi::LPCVOID_ lpSource,
28 boost::winapi::DWORD_ dwMessageId,
29 boost::winapi::DWORD_ dwLanguageId,
30 boost::winapi::LPSTR_ lpBuffer,
31 boost::winapi::DWORD_ nSize,
35 BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ WINAPI
37 boost::winapi::DWORD_ dwFlags,
38 boost::winapi::LPCVOID_ lpSource,
39 boost::winapi::DWORD_ dwMessageId,
40 boost::winapi::DWORD_ dwLanguageId,
41 boost::winapi::LPWSTR_ lpBuffer,
42 boost::winapi::DWORD_ nSize,
45 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
46 BOOST_SYMBOL_IMPORT boost::winapi::UINT_ WINAPI
47 SetErrorMode(boost::winapi::UINT_ uMode);
55 #if defined( BOOST_USE_WINDOWS_H )
57 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
58 const DWORD_ FORMAT_MESSAGE_ALLOCATE_BUFFER_= FORMAT_MESSAGE_ALLOCATE_BUFFER;
61 const DWORD_ FORMAT_MESSAGE_IGNORE_INSERTS_= FORMAT_MESSAGE_IGNORE_INSERTS;
62 const DWORD_ FORMAT_MESSAGE_FROM_STRING_= FORMAT_MESSAGE_FROM_STRING;
63 const DWORD_ FORMAT_MESSAGE_FROM_HMODULE_= FORMAT_MESSAGE_FROM_HMODULE;
64 const DWORD_ FORMAT_MESSAGE_FROM_SYSTEM_= FORMAT_MESSAGE_FROM_SYSTEM;
65 const DWORD_ FORMAT_MESSAGE_ARGUMENT_ARRAY_= FORMAT_MESSAGE_ARGUMENT_ARRAY;
66 const DWORD_ FORMAT_MESSAGE_MAX_WIDTH_MASK_= FORMAT_MESSAGE_MAX_WIDTH_MASK;
68 const WORD_ LANG_NEUTRAL_= LANG_NEUTRAL;
69 const WORD_ LANG_INVARIANT_= LANG_INVARIANT;
71 const WORD_ SUBLANG_DEFAULT_= SUBLANG_DEFAULT; // user default
73 BOOST_FORCEINLINE BOOST_CONSTEXPR WORD_ MAKELANGID_(WORD_ p, WORD_ s) BOOST_NOEXCEPT
75 return MAKELANGID(p,s);
78 #if BOOST_WINAPI_PARTITION_DESKTOP
79 const DWORD_ SEM_FAILCRITICALERRORS_ = SEM_FAILCRITICALERRORS;
80 const DWORD_ SEM_NOGPFAULTERRORBOX_ = SEM_NOGPFAULTERRORBOX;
81 const DWORD_ SEM_NOALIGNMENTFAULTEXCEPT_ = SEM_NOALIGNMENTFAULTEXCEPT;
82 const DWORD_ SEM_NOOPENFILEERRORBOX_ = SEM_NOOPENFILEERRORBOX;
87 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
88 const DWORD_ FORMAT_MESSAGE_ALLOCATE_BUFFER_= 0x00000100;
90 const DWORD_ FORMAT_MESSAGE_IGNORE_INSERTS_= 0x00000200;
91 const DWORD_ FORMAT_MESSAGE_FROM_STRING_= 0x00000400;
92 const DWORD_ FORMAT_MESSAGE_FROM_HMODULE_= 0x00000800;
93 const DWORD_ FORMAT_MESSAGE_FROM_SYSTEM_= 0x00001000;
94 const DWORD_ FORMAT_MESSAGE_ARGUMENT_ARRAY_= 0x00002000;
95 const DWORD_ FORMAT_MESSAGE_MAX_WIDTH_MASK_= 0x000000FF;
97 const WORD_ LANG_NEUTRAL_= 0x00;
98 const WORD_ LANG_INVARIANT_= 0x7f;
100 const WORD_ SUBLANG_DEFAULT_= 0x01; // user default
102 BOOST_FORCEINLINE BOOST_CONSTEXPR WORD_ MAKELANGID_(WORD_ p, WORD_ s) BOOST_NOEXCEPT
104 return (WORD_)((((WORD_)(s)) << 10) | (WORD_)(p));
107 #if BOOST_WINAPI_PARTITION_DESKTOP
108 const DWORD_ SEM_FAILCRITICALERRORS_ = 0x0001;
109 const DWORD_ SEM_NOGPFAULTERRORBOX_ = 0x0002;
110 const DWORD_ SEM_NOALIGNMENTFAULTEXCEPT_ = 0x0004;
111 const DWORD_ SEM_NOOPENFILEERRORBOX_ = 0x8000;
116 #if !defined( BOOST_NO_ANSI_APIS )
117 using ::FormatMessageA;
119 using ::FormatMessageW;
120 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
121 using ::SetErrorMode;
124 #if !defined( BOOST_NO_ANSI_APIS )
125 BOOST_FORCEINLINE DWORD_ format_message(
134 return ::FormatMessageA(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);
138 BOOST_FORCEINLINE DWORD_ format_message(
147 return ::FormatMessageW(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);
153 #endif // BOOST_WINAPI_ERROR_HANDLING_HPP_INCLUDED_