]>
Commit | Line | Data |
---|---|---|
b32b8144 FG |
1 | /* |
2 | * Copyright 2010 Vicente J. Botet Escriba | |
92f5a8d4 | 3 | * Copyright 2015-2018 Andrey Semashev |
b32b8144 FG |
4 | * |
5 | * Distributed under the Boost Software License, Version 1.0. | |
6 | * See http://www.boost.org/LICENSE_1_0.txt | |
7 | */ | |
7c673cae | 8 | |
b32b8144 FG |
9 | #ifndef BOOST_WINAPI_BASIC_TYPES_HPP_INCLUDED_ |
10 | #define BOOST_WINAPI_BASIC_TYPES_HPP_INCLUDED_ | |
7c673cae | 11 | |
b32b8144 | 12 | #include <boost/winapi/config.hpp> |
7c673cae FG |
13 | |
14 | #ifdef BOOST_HAS_PRAGMA_ONCE | |
15 | #pragma once | |
16 | #endif | |
17 | ||
92f5a8d4 | 18 | #if defined(BOOST_USE_WINDOWS_H) |
7c673cae | 19 | # include <windows.h> |
20effc67 | 20 | #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) |
7c673cae FG |
21 | # ifdef UNDER_CE |
22 | # ifndef WINAPI | |
23 | # ifndef _WIN32_WCE_EMULATION | |
24 | # define WINAPI __cdecl // Note this doesn't match the desktop definition | |
25 | # else | |
26 | # define WINAPI __stdcall | |
27 | # endif | |
28 | # endif | |
29 | // Windows CE defines a few functions as inline functions in kfuncs.h | |
30 | typedef int BOOL; | |
31 | typedef unsigned long DWORD; | |
32 | typedef void* HANDLE; | |
20effc67 TL |
33 | typedef HANDLE HGLOBAL; |
34 | typedef void* LPVOID; | |
7c673cae | 35 | # include <kfuncs.h> |
92f5a8d4 | 36 | # endif // UNDER_CE |
7c673cae FG |
37 | #else |
38 | # error "Win32 functions not available" | |
39 | #endif | |
40 | ||
20effc67 TL |
41 | #include <boost/winapi/detail/header.hpp> |
42 | ||
92f5a8d4 TL |
43 | #if defined(_M_IX86) || defined(__i386__) |
44 | #define BOOST_WINAPI_DETAIL_STDCALL __stdcall | |
45 | #else | |
46 | // On architectures other than 32-bit x86 __stdcall is ignored. Clang also issues a warning. | |
47 | #define BOOST_WINAPI_DETAIL_STDCALL | |
48 | #endif | |
49 | ||
50 | #if defined(WINAPI) | |
51 | #define BOOST_WINAPI_WINAPI_CC WINAPI | |
52 | #else | |
53 | #define BOOST_WINAPI_WINAPI_CC BOOST_WINAPI_DETAIL_STDCALL | |
54 | #endif | |
55 | ||
56 | #if defined(CALLBACK) | |
57 | #define BOOST_WINAPI_CALLBACK_CC CALLBACK | |
58 | #else | |
59 | #define BOOST_WINAPI_CALLBACK_CC BOOST_WINAPI_DETAIL_STDCALL | |
60 | #endif | |
61 | ||
62 | #if defined(NTAPI) | |
63 | #define BOOST_WINAPI_NTAPI_CC NTAPI | |
64 | #else | |
65 | #define BOOST_WINAPI_NTAPI_CC BOOST_WINAPI_DETAIL_STDCALL | |
66 | #endif | |
67 | ||
7c673cae FG |
68 | #ifndef NO_STRICT |
69 | #ifndef STRICT | |
70 | #define STRICT 1 | |
71 | #endif | |
72 | #endif | |
73 | ||
74 | #if defined(STRICT) | |
b32b8144 | 75 | #define BOOST_WINAPI_DETAIL_DECLARE_HANDLE(x) struct x##__; typedef struct x##__ *x |
7c673cae | 76 | #else |
b32b8144 | 77 | #define BOOST_WINAPI_DETAIL_DECLARE_HANDLE(x) typedef void* x |
7c673cae FG |
78 | #endif |
79 | ||
92f5a8d4 | 80 | #if !defined(BOOST_USE_WINDOWS_H) |
7c673cae FG |
81 | extern "C" { |
82 | union _LARGE_INTEGER; | |
83 | struct _SECURITY_ATTRIBUTES; | |
b32b8144 | 84 | BOOST_WINAPI_DETAIL_DECLARE_HANDLE(HINSTANCE); |
7c673cae FG |
85 | typedef HINSTANCE HMODULE; |
86 | } | |
87 | #endif | |
88 | ||
89 | #if defined(__GNUC__) | |
b32b8144 | 90 | #define BOOST_WINAPI_DETAIL_EXTENSION __extension__ |
7c673cae | 91 | #else |
b32b8144 | 92 | #define BOOST_WINAPI_DETAIL_EXTENSION |
7c673cae FG |
93 | #endif |
94 | ||
b32b8144 | 95 | // MinGW64 gcc 4.8.2 fails to compile function declarations with boost::winapi::VOID_ arguments even though |
7c673cae | 96 | // the typedef expands to void. In Windows SDK, VOID is a macro which unfolds to void. We use our own macro in such cases. |
b32b8144 | 97 | #define BOOST_WINAPI_DETAIL_VOID void |
7c673cae FG |
98 | |
99 | namespace boost { | |
7c673cae | 100 | namespace winapi { |
92f5a8d4 | 101 | #if defined(BOOST_USE_WINDOWS_H) |
7c673cae FG |
102 | |
103 | typedef ::BOOL BOOL_; | |
104 | typedef ::PBOOL PBOOL_; | |
105 | typedef ::LPBOOL LPBOOL_; | |
106 | typedef ::BOOLEAN BOOLEAN_; | |
107 | typedef ::PBOOLEAN PBOOLEAN_; | |
108 | typedef ::BYTE BYTE_; | |
109 | typedef ::PBYTE PBYTE_; | |
110 | typedef ::LPBYTE LPBYTE_; | |
b32b8144 FG |
111 | typedef ::UCHAR UCHAR_; |
112 | typedef ::PUCHAR PUCHAR_; | |
7c673cae FG |
113 | typedef ::WORD WORD_; |
114 | typedef ::PWORD PWORD_; | |
115 | typedef ::LPWORD LPWORD_; | |
116 | typedef ::DWORD DWORD_; | |
117 | typedef ::PDWORD PDWORD_; | |
118 | typedef ::LPDWORD LPDWORD_; | |
119 | typedef ::HANDLE HANDLE_; | |
120 | typedef ::PHANDLE PHANDLE_; | |
121 | typedef ::SHORT SHORT_; | |
122 | typedef ::PSHORT PSHORT_; | |
123 | typedef ::USHORT USHORT_; | |
124 | typedef ::PUSHORT PUSHORT_; | |
125 | typedef ::INT INT_; | |
126 | typedef ::PINT PINT_; | |
127 | typedef ::LPINT LPINT_; | |
128 | typedef ::UINT UINT_; | |
129 | typedef ::PUINT PUINT_; | |
130 | typedef ::LONG LONG_; | |
131 | typedef ::PLONG PLONG_; | |
132 | typedef ::LPLONG LPLONG_; | |
133 | typedef ::ULONG ULONG_; | |
134 | typedef ::PULONG PULONG_; | |
b32b8144 FG |
135 | typedef ::LONGLONG ULONG64_; |
136 | typedef ::ULONGLONG PULONG64_; | |
7c673cae FG |
137 | typedef ::LONGLONG LONGLONG_; |
138 | typedef ::ULONGLONG ULONGLONG_; | |
139 | typedef ::INT_PTR INT_PTR_; | |
140 | typedef ::UINT_PTR UINT_PTR_; | |
141 | typedef ::LONG_PTR LONG_PTR_; | |
142 | typedef ::ULONG_PTR ULONG_PTR_; | |
143 | typedef ::DWORD_PTR DWORD_PTR_; | |
144 | typedef ::PDWORD_PTR PDWORD_PTR_; | |
145 | typedef ::SIZE_T SIZE_T_; | |
146 | typedef ::PSIZE_T PSIZE_T_; | |
147 | typedef ::SSIZE_T SSIZE_T_; | |
148 | typedef ::PSSIZE_T PSSIZE_T_; | |
149 | typedef VOID VOID_; // VOID is a macro | |
150 | typedef ::PVOID PVOID_; | |
151 | typedef ::LPVOID LPVOID_; | |
152 | typedef ::LPCVOID LPCVOID_; | |
153 | typedef ::CHAR CHAR_; | |
154 | typedef ::LPSTR LPSTR_; | |
155 | typedef ::LPCSTR LPCSTR_; | |
156 | typedef ::WCHAR WCHAR_; | |
157 | typedef ::LPWSTR LPWSTR_; | |
158 | typedef ::LPCWSTR LPCWSTR_; | |
159 | ||
160 | #else // defined( BOOST_USE_WINDOWS_H ) | |
161 | ||
162 | typedef int BOOL_; | |
163 | typedef BOOL_* PBOOL_; | |
164 | typedef BOOL_* LPBOOL_; | |
165 | typedef unsigned char BYTE_; | |
166 | typedef BYTE_* PBYTE_; | |
167 | typedef BYTE_* LPBYTE_; | |
b32b8144 FG |
168 | typedef unsigned char UCHAR_; |
169 | typedef UCHAR_* PUCHAR_; | |
7c673cae FG |
170 | typedef BYTE_ BOOLEAN_; |
171 | typedef BOOLEAN_* PBOOLEAN_; | |
172 | typedef unsigned short WORD_; | |
173 | typedef WORD_* PWORD_; | |
174 | typedef WORD_* LPWORD_; | |
92f5a8d4 | 175 | #if !defined(__LP64__) |
7c673cae | 176 | typedef unsigned long DWORD_; |
92f5a8d4 TL |
177 | #else |
178 | typedef unsigned int DWORD_; | |
179 | #endif | |
7c673cae FG |
180 | typedef DWORD_* PDWORD_; |
181 | typedef DWORD_* LPDWORD_; | |
182 | typedef void* HANDLE_; | |
183 | typedef void** PHANDLE_; | |
184 | ||
185 | typedef short SHORT_; | |
186 | typedef SHORT_* PSHORT_; | |
187 | typedef unsigned short USHORT_; | |
188 | typedef USHORT_* PUSHORT_; | |
189 | typedef int INT_; | |
190 | typedef INT_* PINT_; | |
191 | typedef INT_* LPINT_; | |
192 | typedef unsigned int UINT_; | |
193 | typedef UINT_* PUINT_; | |
92f5a8d4 | 194 | #if !defined(__LP64__) |
7c673cae | 195 | typedef long LONG_; |
92f5a8d4 TL |
196 | typedef unsigned long ULONG_; |
197 | #else | |
198 | typedef int LONG_; | |
199 | typedef unsigned int ULONG_; | |
200 | #endif | |
7c673cae FG |
201 | typedef LONG_* PLONG_; |
202 | typedef LONG_* LPLONG_; | |
7c673cae | 203 | typedef ULONG_* PULONG_; |
92f5a8d4 TL |
204 | #if defined(BOOST_HAS_MS_INT64) |
205 | BOOST_WINAPI_DETAIL_EXTENSION typedef __int64 LONGLONG_; | |
206 | BOOST_WINAPI_DETAIL_EXTENSION typedef unsigned __int64 ULONGLONG_; | |
207 | #else | |
208 | BOOST_WINAPI_DETAIL_EXTENSION typedef long long LONGLONG_; | |
209 | BOOST_WINAPI_DETAIL_EXTENSION typedef unsigned long long ULONGLONG_; | |
210 | #endif | |
211 | typedef LONGLONG_ LONG64_, *PLONG64_; | |
212 | typedef ULONGLONG_ ULONG64_, *PULONG64_; | |
7c673cae | 213 | |
92f5a8d4 TL |
214 | #if defined(_WIN64) |
215 | typedef LONGLONG_ INT_PTR_; | |
216 | typedef ULONGLONG_ UINT_PTR_; | |
217 | typedef LONGLONG_ LONG_PTR_; | |
218 | typedef ULONGLONG_ ULONG_PTR_; | |
219 | #else | |
7c673cae FG |
220 | typedef int INT_PTR_; |
221 | typedef unsigned int UINT_PTR_; | |
222 | typedef long LONG_PTR_; | |
223 | typedef unsigned long ULONG_PTR_; | |
92f5a8d4 | 224 | #endif |
7c673cae FG |
225 | |
226 | typedef ULONG_PTR_ DWORD_PTR_, *PDWORD_PTR_; | |
227 | typedef ULONG_PTR_ SIZE_T_, *PSIZE_T_; | |
228 | typedef LONG_PTR_ SSIZE_T_, *PSSIZE_T_; | |
229 | ||
230 | typedef void VOID_; | |
231 | typedef void *PVOID_; | |
232 | typedef void *LPVOID_; | |
233 | typedef const void *LPCVOID_; | |
234 | ||
235 | typedef char CHAR_; | |
236 | typedef CHAR_ *LPSTR_; | |
237 | typedef const CHAR_ *LPCSTR_; | |
238 | ||
239 | typedef wchar_t WCHAR_; | |
240 | typedef WCHAR_ *LPWSTR_; | |
241 | typedef const WCHAR_ *LPCWSTR_; | |
242 | ||
243 | #endif // defined( BOOST_USE_WINDOWS_H ) | |
244 | ||
92f5a8d4 TL |
245 | // ::NTSTATUS is defined in ntdef.h, which is not included by windows.h by default, so alwaus use LONG_ |
246 | typedef LONG_ NTSTATUS_; | |
247 | typedef NTSTATUS_ *PNTSTATUS_; | |
248 | ||
7c673cae FG |
249 | typedef ::HMODULE HMODULE_; |
250 | ||
b32b8144 | 251 | typedef union BOOST_MAY_ALIAS _LARGE_INTEGER { |
92f5a8d4 TL |
252 | BOOST_WINAPI_DETAIL_EXTENSION struct { |
253 | DWORD_ LowPart; | |
254 | LONG_ HighPart; | |
255 | }; | |
7c673cae FG |
256 | struct { |
257 | DWORD_ LowPart; | |
258 | LONG_ HighPart; | |
259 | } u; | |
260 | LONGLONG_ QuadPart; | |
261 | } LARGE_INTEGER_, *PLARGE_INTEGER_; | |
262 | ||
b32b8144 | 263 | typedef struct BOOST_MAY_ALIAS _SECURITY_ATTRIBUTES { |
7c673cae FG |
264 | DWORD_ nLength; |
265 | LPVOID_ lpSecurityDescriptor; | |
266 | BOOL_ bInheritHandle; | |
267 | } SECURITY_ATTRIBUTES_, *PSECURITY_ATTRIBUTES_, *LPSECURITY_ATTRIBUTES_; | |
268 | ||
7c673cae FG |
269 | } |
270 | } | |
271 | ||
20effc67 TL |
272 | #include <boost/winapi/detail/footer.hpp> |
273 | ||
b32b8144 | 274 | #endif // BOOST_WINAPI_BASIC_TYPES_HPP_INCLUDED_ |