📄 _windows.h
字号:
/* * Copyright (c) 1997-1999 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1999 * Boris Fomitchev * * Copyright (c) 2003 * Francois Dumont * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */#ifndef _STLP_INTERNAL_WINDOWS_H#define _STLP_INTERNAL_WINDOWS_H#if !defined (_STLP_PLATFORM)# define _STLP_PLATFORM "Windows"#endif/* _STLP_WIN32_VERSION is used to detect targetted Windows platforms as * old ones are not supporting some Win32 functions that STLport use. * Limited OSs are going up to and including Windows 98 so they can be * detected using WINVER or _WIN32_WINDOWS macros, we do not have to use * _WINNT_WINDOWS macro for the moment. */#if !defined (_STLP_WIN32_VERSION)# if defined (WINVER)# define _STLP_WIN32_VERSION WINVER# elif defined (_WIN32_WINDOWS)# define _STLP_WIN32_VERSION _WIN32_WINDOWS# endif#endif#if !defined (_STLP_BIG_ENDIAN) && !defined (_STLP_LITTLE_ENDIAN)# if defined (_MIPSEB)# define _STLP_BIG_ENDIAN 1# endif# if defined (__i386) || defined (_M_IX86) || defined (_M_ARM) || \ defined (__amd64__) || defined (_M_AMD64) || defined (__x86_64__) || \ defined (__alpha__)# define _STLP_LITTLE_ENDIAN 1# endif# if defined (__ia64__) /* itanium allows both settings (for instance via gcc -mbig-endian) - hence a seperate check is required */# if defined (__BIG_ENDIAN__)# define _STLP_BIG_ENDIAN 1# else# define _STLP_LITTLE_ENDIAN 1# endif# endif#endif /* _STLP_BIG_ENDIAN */#if !defined (_STLP_WINDOWS_H_INCLUDED)# define _STLP_WINDOWS_H_INCLUDED# if !(defined ( _STLP_MSVC ) || defined (__BORLANDC__) || defined (__ICL) || defined (__WATCOMC__) || \ defined (__MINGW32__) || defined (__DMC__))# if defined (_STLP_USE_MFC)# include <afx.h># else# include <windows.h># endif# else/* This section serves as a replacement for windows.h header for Visual C++ */# if defined (__cplusplus)extern "C" {# endif# if (defined (_M_AMD64) || defined (_M_IA64) || (!defined (_STLP_WCE) && defined (_M_MRX000)) || defined (_M_ALPHA) || \ (defined (_M_PPC) && (_STLP_MSVC_LIB >= 1000))) && !defined (RC_INVOKED)# define InterlockedIncrement _InterlockedIncrement# define InterlockedDecrement _InterlockedDecrement# define InterlockedExchange _InterlockedExchange/* Here we use a different macro name than the InterlockedExchangePointer SDK function * to avoid macro definition conflict as the SDK might already define InterlockedExchangePointer * as a macro. */# define STLPInterlockedExchangePointer _InterlockedExchangePointer# define _STLP_STDCALL# else# if defined (_MAC)# define _STLP_STDCALL _cdecl# else# define _STLP_STDCALL __stdcall# endif# endif# if defined (_STLP_NEW_PLATFORM_SDK)_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedIncrement(long volatile *);_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedDecrement(long volatile *);_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedExchange(long volatile *, long);# if defined (STLPInterlockedExchangePointer)_STLP_IMPORT_DECLSPEC void* _STLP_STDCALL STLPInterlockedExchangePointer(void* volatile *, void*);# endif_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedExchangeAdd(long volatile *, long);# elif defined (_STLP_WCE)/* start of eMbedded Visual C++ specific section */# include <windef.h> /* needed for basic windows types */ /** in SDKs generated with PB5, windef.h somehow includes headers which then define setjmp. */# if (_WIN32_WCE >= 0x500)# define _STLP_NATIVE_SETJMP_H_INCLUDED# endif# ifndef _WINBASE_ /* winbase.h already included? */long WINAPI InterlockedIncrement(long*);long WINAPI InterlockedDecrement(long*);long WINAPI InterlockedExchange(long*, long);# endif# ifndef __WINDOWS__ /* windows.h already included? */# if defined (x86)# include <winbase.h> /* needed for inline versions of Interlocked* functions */# endif# ifndef _MFC_VER# define MessageBox MessageBoxWint WINAPI MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);# define wvsprintf wvsprintfWint WINAPI wvsprintfW(LPWSTR, LPCWSTR, va_list ArgList);void WINAPI ExitThread(DWORD dwExitCode);# if !defined (COREDLL)# define _STLP_WCE_WINBASEAPI DECLSPEC_IMPORT# else# define _STLP_WCE_WINBASEAPI# endif_STLP_WCE_WINBASEAPI int WINAPIMultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar);_STLP_WCE_WINBASEAPI UINT WINAPI GetACP();_STLP_WCE_WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE hProcess, DWORD uExitCode);# define OutputDebugString OutputDebugStringWvoid WINAPI OutputDebugStringW(LPCWSTR);_STLP_WCE_WINBASEAPI void WINAPI Sleep(DWORD);# undef _STLP_WCE_WINBASEAPI# endif /* !_MFC_VER */# endif /* !__WINDOWS__ *//* end of eMbedded Visual C++ specific section */# else/* boris : for the latest SDK, you may actually need the other version of the declaration (above) * even for earlier VC++ versions. There is no way to tell SDK versions apart, sorry ... */_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedIncrement(long*);_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedDecrement(long*);_STLP_IMPORT_DECLSPEC long _STLP_STDCALL InterlockedExchange(long*, long);# endif# if !defined (STLPInterlockedExchangePointer)/* This API function do not exist in the old platform SDK and is equivalent to * InterlockedExchange on 32 bits platform: */# if defined (__cplusplus)/* We do not define this function if we are not in a C++ translation unit just * because of the inline portability issue it would introduce. We will have to * fix it the day we need this function for a C translation unit. */inlinevoid* _STLP_CALL STLPInterlockedExchangePointer(void* volatile* __a, void* __b) {# if defined (_STLP_MSVC)/* Here MSVC produces warning if 64 bits portability issue is activated. * MSVC do not see that _STLP_ATOMIC_EXCHANGE_PTR is a macro which content * is based on the platform, Win32 or Win64 */# pragma warning (push)# pragma warning (disable : 4311) // pointer truncation from void* to long# pragma warning (disable : 4312) // conversion from long to void* of greater size# endif# if !defined (_STLP_NO_NEW_STYLE_CASTS) return reinterpret_cast<void*>(InterlockedExchange(reinterpret_cast<long*>(const_cast<void**>(__a)), reinterpret_cast<long>(__b)));# else return (void*)InterlockedExchange((long*)__a, (long)__b);# endif# if defined (_STLP_MSVC)# pragma warning (pop)# endif}# endif# endif# if !defined (_STLP_WCE)_STLP_IMPORT_DECLSPEC void _STLP_STDCALL Sleep(unsigned long);_STLP_IMPORT_DECLSPEC void _STLP_STDCALL OutputDebugStringA(const char* lpOutputString);# endif# if defined (InterlockedIncrement)# pragma intrinsic(_InterlockedIncrement)# pragma intrinsic(_InterlockedDecrement)# pragma intrinsic(_InterlockedExchange)# pragma intrinsic(_InterlockedExchangePointer)# endif# if defined (__cplusplus)} /* extern "C" */# endif# endif /* STL_MSVC __BORLANDC__ __ICL __WATCOMC__ __MINGW32__ __DMC__*/#endif /* _STLP_WINDOWS_H_INCLUDED */#endif /* _STLP_INTERNAL_WINDOWS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -