Win32Minimal.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. /// @file
  6. /// This file includes minimal declarations of Win32 API to avoid Windows.h polution.
  7. #pragma once
  8. #include <cstdarg>
  9. // Minimal Windows.h declaration. Only what's needed.
  10. extern "C" {
  11. #define ANKI_WINAPI __stdcall
  12. #define ANKI_WINBASEAPI __declspec(dllimport)
  13. #define ANKI_DECLARE_HANDLE(name) \
  14. struct name##__; \
  15. typedef struct name##__* name
  16. #define ANKI_MAKELANGID(p, s) ((((WORD)(s)) << 10) | (WORD)(p))
  17. // Types
  18. typedef void VOID;
  19. typedef int BOOL;
  20. typedef char CHAR;
  21. typedef short SHORT;
  22. typedef int INT;
  23. typedef long LONG;
  24. typedef unsigned char UCHAR;
  25. typedef unsigned short USHORT;
  26. typedef unsigned int UINT;
  27. typedef unsigned long ULONG;
  28. typedef unsigned char BYTE;
  29. typedef unsigned short WORD;
  30. typedef unsigned long DWORD;
  31. typedef unsigned __int64 ULONG_PTR;
  32. typedef __int64 LONG_PTR;
  33. typedef __int64 LONGLONG;
  34. typedef ULONG_PTR SIZE_T;
  35. typedef LONG HRESULT;
  36. typedef BYTE BOOLEAN;
  37. typedef ULONG_PTR DWORD_PTR;
  38. typedef DWORD* LPDWORD;
  39. typedef void* HANDLE;
  40. typedef void* PVOID;
  41. typedef void* LPVOID;
  42. typedef const CHAR *LPCSTR, *PCSTR;
  43. typedef const CHAR* PCZZSTR;
  44. typedef CHAR* LPSTR;
  45. typedef struct HINSTANCE__* HINSTANCE;
  46. typedef HINSTANCE HMODULE;
  47. typedef wchar_t WCHAR;
  48. typedef const WCHAR* PCWSTR;
  49. typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR;
  50. typedef const void* LPCVOID;
  51. typedef HANDLE HLOCAL;
  52. ANKI_DECLARE_HANDLE(HWND);
  53. typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
  54. typedef DWORD(ANKI_WINAPI* PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter);
  55. typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
  56. typedef struct _RTL_CRITICAL_SECTION RTL_CRITICAL_SECTION, CRITICAL_SECTION, *LPCRITICAL_SECTION, *PCRITICAL_SECTION;
  57. typedef struct _RTL_SRWLOCK RTL_SRWLOCK, *PSRWLOCK;
  58. typedef struct _RTL_CONDITION_VARIABLE RTL_CONDITION_VARIABLE, *PCONDITION_VARIABLE;
  59. typedef struct _SHFILEOPSTRUCTA* LPSHFILEOPSTRUCTA;
  60. typedef struct _WIN32_FIND_DATAA WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
  61. typedef union _LARGE_INTEGER LARGE_INTEGER;
  62. typedef struct _CONSOLE_SCREEN_BUFFER_INFO CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
  63. typedef struct _SYSTEM_INFO SYSTEM_INFO, *LPSYSTEM_INFO;
  64. // Thread & locks
  65. ANKI_WINBASEAPI HANDLE ANKI_WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress,
  66. LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
  67. ANKI_WINBASEAPI DWORD_PTR ANKI_WINAPI SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
  68. ANKI_WINBASEAPI DWORD ANKI_WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
  69. ANKI_WINBASEAPI BOOL ANKI_WINAPI CloseHandle(HANDLE hObject);
  70. ANKI_WINBASEAPI DWORD ANKI_WINAPI GetCurrentThreadId(VOID);
  71. ANKI_WINBASEAPI HRESULT ANKI_WINAPI SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription);
  72. ANKI_WINBASEAPI HRESULT ANKI_WINAPI GetThreadDescription(HANDLE hThread, PWSTR* ppszThreadDescription);
  73. ANKI_WINBASEAPI HANDLE ANKI_WINAPI GetCurrentThread();
  74. ANKI_WINBASEAPI VOID ANKI_WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
  75. ANKI_WINBASEAPI VOID ANKI_WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
  76. ANKI_WINBASEAPI BOOL ANKI_WINAPI TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
  77. ANKI_WINBASEAPI VOID ANKI_WINAPI LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
  78. ANKI_WINBASEAPI VOID ANKI_WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
  79. ANKI_WINBASEAPI VOID ANKI_WINAPI InitializeSRWLock(PSRWLOCK SRWLock);
  80. ANKI_WINBASEAPI VOID ANKI_WINAPI AcquireSRWLockExclusive(PSRWLOCK SRWLock);
  81. ANKI_WINBASEAPI VOID ANKI_WINAPI AcquireSRWLockShared(PSRWLOCK SRWLock);
  82. ANKI_WINBASEAPI VOID ANKI_WINAPI ReleaseSRWLockExclusive(PSRWLOCK SRWLock);
  83. ANKI_WINBASEAPI VOID ANKI_WINAPI ReleaseSRWLockShared(PSRWLOCK SRWLock);
  84. ANKI_WINBASEAPI BOOLEAN ANKI_WINAPI TryAcquireSRWLockExclusive(PSRWLOCK SRWLock);
  85. ANKI_WINBASEAPI BOOLEAN ANKI_WINAPI TryAcquireSRWLockShared(PSRWLOCK SRWLock);
  86. ANKI_WINBASEAPI VOID ANKI_WINAPI InitializeConditionVariable(PCONDITION_VARIABLE ConditionVariable);
  87. ANKI_WINBASEAPI BOOL ANKI_WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection,
  88. DWORD dwMilliseconds);
  89. ANKI_WINBASEAPI VOID ANKI_WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE ConditionVariable);
  90. ANKI_WINBASEAPI VOID ANKI_WINAPI WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable);
  91. // Filesystem
  92. ANKI_WINBASEAPI DWORD ANKI_WINAPI GetFileAttributesA(LPCSTR lpFileName);
  93. ANKI_WINBASEAPI int ANKI_WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp);
  94. ANKI_WINBASEAPI BOOL ANKI_WINAPI CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
  95. ANKI_WINBASEAPI HRESULT ANKI_WINAPI SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
  96. ANKI_WINBASEAPI HANDLE ANKI_WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
  97. ANKI_WINBASEAPI BOOL ANKI_WINAPI FindClose(HANDLE hFindFile);
  98. ANKI_WINBASEAPI BOOL ANKI_WINAPI FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
  99. ANKI_WINBASEAPI DWORD ANKI_WINAPI GetTempPathA(DWORD nBufferLength, LPSTR lpBuffer);
  100. // Other
  101. ANKI_WINBASEAPI DWORD ANKI_WINAPI GetLastError(VOID);
  102. ANKI_WINBASEAPI BOOL ANKI_WINAPI QueryPerformanceFrequency(LARGE_INTEGER* lpFrequency);
  103. ANKI_WINBASEAPI BOOL ANKI_WINAPI QueryPerformanceCounter(LARGE_INTEGER* lpPerformanceCount);
  104. ANKI_WINBASEAPI VOID ANKI_WINAPI Sleep(DWORD dwMilliseconds);
  105. ANKI_WINBASEAPI HANDLE ANKI_WINAPI GetStdHandle(DWORD nStdHandle);
  106. ANKI_WINBASEAPI BOOL ANKI_WINAPI GetConsoleScreenBufferInfo(HANDLE hConsoleOutput, PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo);
  107. ANKI_WINBASEAPI BOOL ANKI_WINAPI SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
  108. ANKI_WINBASEAPI VOID ANKI_WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
  109. ANKI_WINBASEAPI DWORD ANKI_WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
  110. ANKI_WINBASEAPI int ANKI_WINAPI MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
  111. ANKI_WINBASEAPI DWORD ANKI_WINAPI FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize,
  112. va_list* Arguments);
  113. ANKI_WINBASEAPI HLOCAL ANKI_WINAPI LocalFree(HLOCAL hMem);
  114. ANKI_WINBASEAPI BOOL ANKI_WINAPI IsDebuggerPresent();
  115. ANKI_WINBASEAPI BOOL ANKI_WINAPI SetProcessDPIAware();
  116. #undef ANKI_WINBASEAPI
  117. #undef ANKI_DECLARE_HANDLE
  118. } // end extern "C"
  119. // AnKi's wrappers for various Windows.h structs. Required because we can't declare those structs in the global
  120. // namespace since there are files that might include this header and Windows.h at the same time.
  121. namespace anki {
  122. // Consts
  123. constexpr DWORD INVALID_FILE_ATTRIBUTES = (DWORD)-1;
  124. constexpr DWORD FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
  125. constexpr DWORD MAX_PATH = 260;
  126. static const HANDLE INVALID_HANDLE_VALUE = (HANDLE)(LONG_PTR)-1;
  127. constexpr DWORD ERROR_NO_MORE_FILES = 18L;
  128. constexpr WORD FO_DELETE = 0x0003;
  129. constexpr WORD FOF_NOCONFIRMATION = 0x0010;
  130. constexpr WORD FOF_NOERRORUI = 0x0400;
  131. constexpr WORD FOF_SILENT = 0x0004;
  132. constexpr WORD CSIDL_PROFILE = 0x0028;
  133. constexpr DWORD STD_OUTPUT_HANDLE = (DWORD)-11;
  134. constexpr HRESULT S_OK = 0;
  135. constexpr DWORD INFINITE = 0xFFFFFFFF;
  136. constexpr DWORD ERROR_INSUFFICIENT_BUFFER = 122l;
  137. constexpr DWORD ERROR_SUCCESS = 0;
  138. constexpr WORD FOREGROUND_BLUE = 0x0001;
  139. constexpr WORD FOREGROUND_GREEN = 0x0002;
  140. constexpr WORD FOREGROUND_RED = 0x0004;
  141. constexpr WORD FOREGROUND_INTENSITY = 0x0008;
  142. constexpr WORD BACKGROUND_BLUE = 0x0010;
  143. constexpr WORD BACKGROUND_GREEN = 0x0020;
  144. constexpr WORD BACKGROUND_RED = 0x0040;
  145. constexpr WORD MB_OK = 0x00000000L;
  146. constexpr WORD MB_ICONWARNING = 0x00000030L;
  147. constexpr WORD MB_ICONERROR = 0x00000010L;
  148. constexpr DWORD FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
  149. constexpr DWORD FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
  150. constexpr DWORD FORMAT_MESSAGE_FROM_STRING = 0x00000400;
  151. constexpr DWORD FORMAT_MESSAGE_FROM_HMODULE = 0x00000800;
  152. constexpr DWORD FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
  153. constexpr DWORD FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
  154. constexpr DWORD FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF;
  155. constexpr DWORD LANG_NEUTRAL = 0x00;
  156. constexpr DWORD SUBLANG_DEFAULT = 0x01;
  157. // Types
  158. typedef union _LARGE_INTEGER
  159. {
  160. struct
  161. {
  162. ULONG LowPart;
  163. LONG HighPart;
  164. } DUMMYSTRUCTNAME;
  165. struct
  166. {
  167. ULONG LowPart;
  168. LONG HighPart;
  169. } u;
  170. LONGLONG QuadPart;
  171. } LARGE_INTEGER;
  172. typedef struct _SECURITY_ATTRIBUTES
  173. {
  174. DWORD nLength;
  175. LPVOID lpSecurityDescriptor;
  176. BOOL bInheritHandle;
  177. } SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
  178. typedef struct _LIST_ENTRY
  179. {
  180. struct _LIST_ENTRY* Flink;
  181. struct _LIST_ENTRY* Blink;
  182. } LIST_ENTRY, *PLIST_ENTRY;
  183. typedef struct _RTL_CRITICAL_SECTION_DEBUG
  184. {
  185. WORD Type;
  186. WORD CreatorBackTraceIndex;
  187. struct _RTL_CRITICAL_SECTION* CriticalSection;
  188. LIST_ENTRY ProcessLocksList;
  189. DWORD EntryCount;
  190. DWORD ContentionCount;
  191. DWORD Flags;
  192. WORD CreatorBackTraceIndexHigh;
  193. WORD SpareWORD;
  194. } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG;
  195. #pragma pack(push, 8)
  196. typedef struct _RTL_CRITICAL_SECTION
  197. {
  198. PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
  199. LONG LockCount;
  200. LONG RecursionCount;
  201. HANDLE OwningThread;
  202. HANDLE LockSemaphore;
  203. ULONG_PTR SpinCount;
  204. } CRITICAL_SECTION, *LPCRITICAL_SECTION, *PCRITICAL_SECTION;
  205. #pragma pack(pop)
  206. typedef struct _RTL_SRWLOCK
  207. {
  208. PVOID Ptr;
  209. } SRWLOCK, *PSRWLOCK;
  210. typedef struct _RTL_CONDITION_VARIABLE
  211. {
  212. PVOID Ptr;
  213. } CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE, *PCONDITION_VARIABLE;
  214. typedef WORD FILEOP_FLAGS;
  215. typedef struct _SHFILEOPSTRUCTA
  216. {
  217. HWND hwnd;
  218. UINT wFunc;
  219. PCZZSTR pFrom;
  220. PCZZSTR pTo;
  221. FILEOP_FLAGS fFlags;
  222. BOOL fAnyOperationsAborted;
  223. LPVOID hNameMappings;
  224. PCSTR lpszProgressTitle;
  225. } SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
  226. typedef struct _FILETIME
  227. {
  228. DWORD dwLowDateTime;
  229. DWORD dwHighDateTime;
  230. } FILETIME, *PFILETIME, *LPFILETIME;
  231. typedef struct _WIN32_FIND_DATAA
  232. {
  233. DWORD dwFileAttributes;
  234. FILETIME ftCreationTime;
  235. FILETIME ftLastAccessTime;
  236. FILETIME ftLastWriteTime;
  237. DWORD nFileSizeHigh;
  238. DWORD nFileSizeLow;
  239. DWORD dwReserved0;
  240. DWORD dwReserved1;
  241. CHAR cFileName[MAX_PATH];
  242. CHAR cAlternateFileName[14];
  243. } WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
  244. typedef struct _COORD
  245. {
  246. SHORT X;
  247. SHORT Y;
  248. } COORD, *PCOORD;
  249. typedef struct _SMALL_RECT
  250. {
  251. SHORT Left;
  252. SHORT Top;
  253. SHORT Right;
  254. SHORT Bottom;
  255. } SMALL_RECT, *PSMALL_RECT;
  256. typedef struct _CONSOLE_SCREEN_BUFFER_INFO
  257. {
  258. COORD dwSize;
  259. COORD dwCursorPosition;
  260. WORD wAttributes;
  261. SMALL_RECT srWindow;
  262. COORD dwMaximumWindowSize;
  263. } CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
  264. typedef struct _SYSTEM_INFO
  265. {
  266. union
  267. {
  268. DWORD dwOemId; // Obsolete field...do not use
  269. struct
  270. {
  271. WORD wProcessorArchitecture;
  272. WORD wReserved;
  273. } DUMMYSTRUCTNAME;
  274. } DUMMYUNIONNAME;
  275. DWORD dwPageSize;
  276. LPVOID lpMinimumApplicationAddress;
  277. LPVOID lpMaximumApplicationAddress;
  278. DWORD_PTR dwActiveProcessorMask;
  279. DWORD dwNumberOfProcessors;
  280. DWORD dwProcessorType;
  281. DWORD dwAllocationGranularity;
  282. WORD wProcessorLevel;
  283. WORD wProcessorRevision;
  284. } SYSTEM_INFO, *LPSYSTEM_INFO;
  285. // Critical section
  286. inline void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
  287. {
  288. ::InitializeCriticalSection(reinterpret_cast<::LPCRITICAL_SECTION>(lpCriticalSection));
  289. }
  290. inline void EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
  291. {
  292. ::EnterCriticalSection(reinterpret_cast<::LPCRITICAL_SECTION>(lpCriticalSection));
  293. }
  294. inline BOOL TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
  295. {
  296. return ::TryEnterCriticalSection(reinterpret_cast<::LPCRITICAL_SECTION>(lpCriticalSection));
  297. }
  298. inline void LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
  299. {
  300. ::LeaveCriticalSection(reinterpret_cast<::LPCRITICAL_SECTION>(lpCriticalSection));
  301. }
  302. inline void DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
  303. {
  304. ::DeleteCriticalSection(reinterpret_cast<::LPCRITICAL_SECTION>(lpCriticalSection));
  305. }
  306. // Shared lock
  307. inline void InitializeSRWLock(PSRWLOCK SRWLock)
  308. {
  309. ::InitializeSRWLock(reinterpret_cast<::PSRWLOCK>(SRWLock));
  310. }
  311. inline void AcquireSRWLockExclusive(PSRWLOCK SRWLock)
  312. {
  313. ::AcquireSRWLockExclusive(reinterpret_cast<::PSRWLOCK>(SRWLock));
  314. }
  315. inline void AcquireSRWLockShared(PSRWLOCK SRWLock)
  316. {
  317. ::AcquireSRWLockShared(reinterpret_cast<::PSRWLOCK>(SRWLock));
  318. }
  319. inline void ReleaseSRWLockExclusive(PSRWLOCK SRWLock)
  320. {
  321. ::ReleaseSRWLockExclusive(reinterpret_cast<::PSRWLOCK>(SRWLock));
  322. }
  323. inline void ReleaseSRWLockShared(PSRWLOCK SRWLock)
  324. {
  325. ::ReleaseSRWLockShared(reinterpret_cast<::PSRWLOCK>(SRWLock));
  326. }
  327. inline BOOL TryAcquireSRWLockExclusive(PSRWLOCK SRWLock)
  328. {
  329. return ::TryAcquireSRWLockExclusive(reinterpret_cast<::PSRWLOCK>(SRWLock));
  330. }
  331. inline BOOL TryAcquireSRWLockShared(PSRWLOCK SRWLock)
  332. {
  333. return ::TryAcquireSRWLockShared(reinterpret_cast<::PSRWLOCK>(SRWLock));
  334. }
  335. // Condition var
  336. inline void InitializeConditionVariable(PCONDITION_VARIABLE ConditionVariable)
  337. {
  338. ::InitializeConditionVariable(reinterpret_cast<::PCONDITION_VARIABLE>(ConditionVariable));
  339. }
  340. inline BOOL SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD dwMilliseconds)
  341. {
  342. return ::SleepConditionVariableCS(reinterpret_cast<::PCONDITION_VARIABLE>(ConditionVariable),
  343. reinterpret_cast<::PCRITICAL_SECTION>(CriticalSection), dwMilliseconds);
  344. }
  345. inline void WakeAllConditionVariable(PCONDITION_VARIABLE ConditionVariable)
  346. {
  347. ::WakeAllConditionVariable(reinterpret_cast<::PCONDITION_VARIABLE>(ConditionVariable));
  348. }
  349. inline void WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable)
  350. {
  351. ::WakeConditionVariable(reinterpret_cast<::PCONDITION_VARIABLE>(ConditionVariable));
  352. }
  353. // Filesystem
  354. inline DWORD GetFileAttributesA(LPCSTR lpFileName)
  355. {
  356. return ::GetFileAttributesA(lpFileName);
  357. }
  358. inline int SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp)
  359. {
  360. return ::SHFileOperationA(reinterpret_cast<::LPSHFILEOPSTRUCTA>(lpFileOp));
  361. }
  362. inline BOOL CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
  363. {
  364. return ::CreateDirectoryA(lpPathName, reinterpret_cast<::LPSECURITY_ATTRIBUTES>(lpSecurityAttributes));
  365. }
  366. inline HRESULT SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath)
  367. {
  368. return ::SHGetFolderPathA(hwnd, csidl, hToken, dwFlags, pszPath);
  369. }
  370. inline HANDLE FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData)
  371. {
  372. return ::FindFirstFileA(lpFileName, reinterpret_cast<::LPWIN32_FIND_DATAA>(lpFindFileData));
  373. }
  374. inline BOOL FindClose(HANDLE hFindFile)
  375. {
  376. return ::FindClose(hFindFile);
  377. }
  378. inline BOOL FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData)
  379. {
  380. return ::FindNextFileA(hFindFile, reinterpret_cast<::LPWIN32_FIND_DATAA>(lpFindFileData));
  381. }
  382. inline DWORD GetTempPathA(DWORD nBufferLength, LPSTR lpBuffer)
  383. {
  384. return ::GetTempPathA(nBufferLength, lpBuffer);
  385. }
  386. // Other
  387. inline BOOL QueryPerformanceFrequency(LARGE_INTEGER* lpFrequency)
  388. {
  389. return ::QueryPerformanceFrequency(reinterpret_cast<::LARGE_INTEGER*>(lpFrequency));
  390. }
  391. inline BOOL QueryPerformanceCounter(LARGE_INTEGER* lpPerformanceCount)
  392. {
  393. return ::QueryPerformanceCounter(reinterpret_cast<::LARGE_INTEGER*>(lpPerformanceCount));
  394. }
  395. inline BOOL GetConsoleScreenBufferInfo(HANDLE hConsoleOutput, PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
  396. {
  397. return ::GetConsoleScreenBufferInfo(hConsoleOutput, reinterpret_cast<::PCONSOLE_SCREEN_BUFFER_INFO>(lpConsoleScreenBufferInfo));
  398. }
  399. inline VOID GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)
  400. {
  401. ::GetSystemInfo(reinterpret_cast<::LPSYSTEM_INFO>(lpSystemInfo));
  402. }
  403. inline DWORD GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize)
  404. {
  405. return ::GetModuleFileNameA(hModule, lpFilename, nSize);
  406. }
  407. inline int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
  408. {
  409. return ::MessageBoxA(hWnd, lpText, lpCaption, uType);
  410. }
  411. inline DWORD FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, va_list* Arguments)
  412. {
  413. return ::FormatMessageA(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);
  414. }
  415. inline HLOCAL LocalFree(HLOCAL hMem)
  416. {
  417. return ::LocalFree(hMem);
  418. }
  419. inline BOOL IsDebuggerPresent()
  420. {
  421. return ::IsDebuggerPresent();
  422. }
  423. inline BOOL SetProcessDPIAware()
  424. {
  425. return ::SetProcessDPIAware();
  426. }
  427. } // end namespace anki