_evc.h

来自「stl的源码」· C头文件 代码 · 共 334 行

H
334
字号
/* * File to have Microsoft eMbedded Visual C++ 3.0 and .NET working with STLport * May 2004 * Origin : Zdenek Nemec - zero@mapfactor.com *          Michael Fink - vividos@users.sourceforge.net */#ifndef _STLP_EVC_H#define _STLP_EVC_H#define _STLP_COMPILER "eMbedded Visual C++"// This flag is being used by STLport to support// old-fashioned Windows CE SDK (see stl_wince.h)// do not use with eMebedded Visual C++ 3 or 4!#ifdef _STLP_WINCE#  undef _STLP_WINCE#endif/* Compiler dependent define. The following defines may be available: * _STLP_WCE_EVC3 when compiling under eMbedded Visual C++ 3 * _STLP_WCE_NET  when compiling under eMbedded Visual C++ .NET * _STLP_WCE      always defined when compiling with one of the above */#undef _STLP_WCE_EVC3#undef _STLP_WCE_NET#if (_WIN32_WCE > 300)#  define _STLP_WCE_NET UNDER_CE#elif (_WIN32_WCE == 300)#  define _STLP_WCE_EVC3 UNDER_CE#else#  error No support for Windows CE below 3.0!#endif// This is defined for all platforms using Windows CE#define _STLP_WCE/* All Windows CE versions up to at least version 5 are little-endian, even * if the hardware (like e.g. MIPS) can be configured for big-endian, too. */#define _STLP_LITTLE_ENDIAN// Ensure _DEBUG is defined.#if defined (DEBUG) && !defined (_DEBUG)#  define _DEBUG#endif// inherit all msvc6 options#include <stl/config/_msvc.h>// CE up to at least version 5 has no C locale support#define _STLP_NO_LOCALE_SUPPORT#if _WIN32_WCE >= 420   // SDKs built with PB5 have terminate&co in namespace std...#  define _STLP_VENDOR_TERMINATE_STD _STLP_VENDOR_STD#  define _STLP_VENDOR_UNCAUGHT_EXCEPTION_STD _STLP_VENDOR_STD   // ...and new_handler/set_new_handler in the global namespace.#  define _STLP_GLOBAL_NEW_HANDLER 1#endif// Always threaded in eMbedded Visual C++ 3.0 and .NET#ifndef _MT#  define _MT#endif// we don't have a static native runtime library#undef _STLP_USING_CROSS_NATIVE_RUNTIME_LIB#if _WIN32_WCE < 400// no long double under CE3 and older#  define _STLP_NO_LONG_DOUBLE#endif// no *f and *l math functions available#define _STLP_NO_VENDOR_MATH_F#define _STLP_NO_VENDOR_MATH_L/* * Redirect cout, cerr and clog: * If defined redirect cout, cerr and clog to * files stdout.txt, stderr.txt and stdlog.txt *///# define _STLP_REDIRECT_STDSTREAMS/* * Static class members may generate LNK1179: * Wrong COMDAT packing may cause LNK1179 error. * For details see http://groups.google.com/groups?th=8a05c82c4ffee280 * example P78. This define is not used/needed at this moment * but may came handy in future... *///# define _STLP_STATIC_MEMBERS_BUG// Use wide-string interface of windows native functions (CreateFile...).// Note that this should be defined all the time while under CE.#if defined (UNICODE)#  define _STLP_USE_WIDE_INTERFACE#endif// Force exception std to std instead of __std_alias.#if defined (__cplusplus) && !defined (_STLP_HAS_NO_NAMESPACES)#  ifdef _STLP_VENDOR_EXCEPT_STD#    undef _STLP_VENDOR_EXCEPT_STD#  endif#  define _STLP_VENDOR_EXCEPT_STD std#endif// short string optimization bug under evc3, evc4 using ARM compiler#if _MSC_VER < 1400 && (defined (ARM) || defined (_ARM_))#  define _STLP_DONT_USE_SHORT_STRING_OPTIM#endif// when using MFC, disable another placement new declaration, since there is one in wcealt.h#if !defined (__BUILDING_STLPORT) && defined (_MFC_VER)#  define __PLACEMENT_NEW_INLINE#endif// threads#undef _REENTRANT#define _REENTRANT#undef _NOTHREADS// Use old fashioned headers (ctime vs. time.h).#undef _STLP_NO_NEW_C_HEADERS#define _STLP_NO_NEW_C_HEADERS// exception handling support: only on evc4 and user added /GX to project settings#if defined (_STLP_WCE_EVC3) || !defined (_CPPUNWIND)#  define _STLP_NO_EXCEPTION_HEADER#  define _STLP_NO_EXCEPTIONS#  undef _STLP_USE_EXCEPTIONS#  ifndef _STLP_THROW_BAD_ALLOC#    define _STLP_THROW_BAD_ALLOC { _STLP_WINCE_TRACE(L"out of memory"); ExitThread(1); }#  endif#endif#define _STLP_WINCE_TRACE(msg) OutputDebugString(msg)/* * eMbedded Visual C++ .NET specific settings */#if defined (_STLP_WCE_NET)// evc4 has no locale and time support#  define _STLP_NO_LOCALE_SUPPORT#  define _STLP_NO_TIME_SUPPORT// ptrdiff_t is not defined in evc4 headers#  ifndef _PTRDIFF_T_DEFINED   typedef int ptrdiff_t;#    define _PTRDIFF_T_DEFINED#  endif/* * Helper macros for including the native headers in cases where a file with * the same name also exists in the STLport include folder. The idea behind * this is that we first go up one directory and then down into a dir that * is only present in the native install but not in STLport. * */#  if !defined (_STLP_NATIVE_INCLUDE_PATH)#    if defined (_X86_)#      if defined (_STLP_WCE_TARGET_PROC_SUBTYPE_EMULATOR)#        define _STLP_NATIVE_INCLUDE_PATH ../Emulator#      else#        define _STLP_NATIVE_INCLUDE_PATH ../X86#      endif#    elif defined (_ARM_)#      if _MSC_VER < 1400         // eVC3/4#        if defined (ARMV4)#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4#        elif defined (ARMV4I)#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i#        elif defined (ARMV4T)#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4t#        else#          error Unknown ARM SDK.#        endif#      else         // VC8 crosscompiling for CE#        if defined (ARMV4)           // VC8 bundled Pocket PC 2003 SDK don't have a target CPU subfolder.#          if defined(WIN32_PLATFORM_PSPC)#            define _STLP_NATIVE_INCLUDE_PATH ../Include#          else#            define _STLP_NATIVE_INCLUDE_PATH ../Armv4#          endif#        elif defined(ARMV4I) || defined(ARMV4T)#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i#        else#          error Unknown ARM SDK.#        endif#      endif#    elif defined (_MIPS_)#      if defined (MIPS16)#        define _STLP_NATIVE_INCLUDE_PATH ../mips16#      elif defined (MIPSII)#        define _STLP_NATIVE_INCLUDE_PATH ../mipsII#      elif defined (MIPSII_FP)#        define _STLP_NATIVE_INCLUDE_PATH ../mipsII_fp#      elif defined (MIPSIV)#        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV#      elif defined (MIPSIV_FP)#        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV_fp#      else#        error Unknown MIPS SDK.#      endif#    elif defined (SHx)#      if defined (SH3)#        define _STLP_NATIVE_INCLUDE_PATH ../sh3#      elif defined (SH4)#        define _STLP_NATIVE_INCLUDE_PATH ../sh4#      else#        error Unknown SHx SDK.#      endif#    else#      error Unknown SDK.#    endif#  endif /* !_STLP_NATIVE_INCLUDE_PATH *//* Workaround when using MFCCE and using <new> together: MFCCE's wcealt.h doesn't * check for __PLACEMENT_NEW_INLINE before defining operator new, so when <new> * defines the operatore before, there will be an error C2084: * "function 'void *__cdecl operator new(unsigned int,void *)' already has a body". */#  ifdef _STLP_USE_MFC#    define __PLACEMENT_NEW_INLINE#  endif#endif /* _STLP_WCE_NET *//* * eMbedded Visual C++ 3.0 specific settings */#if defined (_STLP_WCE_EVC3)#  define _STLP_NO_NATIVE_MBSTATE_T// evc3 has no locale and time support#  define _STLP_NO_LOCALE_SUPPORT#  define _STLP_NO_TIME_SUPPORT// evc3 has new, but no explicit header#  define _STLP_NO_NEW_HEADER#  define _STLP_NO_NEW_NEW_HEADER// evc3 has no bad_alloc and no typeinfo#  undef _STLP_NO_BAD_ALLOC#  define _STLP_NO_BAD_ALLOC#  undef _STLP_NO_TYPEINFO#  define _STLP_NO_TYPEINFO// missing things in eMbedded Visual C++ 3.0 headers#  ifndef _SIZE_T_DEFINED   typedef unsigned int size_t;#    define _SIZE_T_DEFINED#  endif#  ifndef _WCHAR_T_DEFINED   typedef unsigned short wchar_t;#    define _WCHAR_T_DEFINED#  endif// ptrdiff_t is not defined in evc3 headers#  ifndef _PTRDIFF_T_DEFINED   typedef int ptrdiff_t;#    define _PTRDIFF_T_DEFINED#  endif// clock_t is not defined in evc3 headers#  ifndef _CLOCK_T_DEFINED   typedef long clock_t;#    define _CLOCK_T_DEFINED#  endif// Struct tm is not defined in evc3 headers#  ifndef _TM_DEFINEDstruct tm {   int tm_sec;     /* seconds after the minute - [0,59] */   int tm_min;     /* minutes after the hour - [0,59] */   int tm_hour;    /* hours since midnight - [0,23] */   int tm_mday;    /* day of the month - [1,31] */   int tm_mon;     /* months since January - [0,11] */   int tm_year;    /* years since 1900 */   int tm_wday;    /* days since Sunday - [0,6] */   int tm_yday;    /* days since January 1 - [0,365] */   int tm_isdst;   /* daylight savings time flag */};#    define _TM_DEFINED#  endif// define placement new and delete operator// note: when MFCCE headers are included first, don't define the new operator,//       since it was already defined in wcealt.h#  ifdef __cplusplus#    ifndef __PLACEMENT_NEW_INLINE#      ifndef _MFC_VERinline void *__cdecl operator new(size_t, void *_P) { return (_P); }#      endif /* _MFC_VER */inline void __cdecl operator delete(void *, void *) { return; }#      define __PLACEMENT_NEW_INLINE#    endif#  endif /* __cplusplus */// evc3 doesn't have native wide functions, e.g. fgetwc, wmemmove#  define _STLP_NO_NATIVE_WIDE_FUNCTIONS// evc3 doesn't have assert.h#  ifndef _ASSERT_DEFINED#    define assert(expr) _STLP_ASSERT(expr)#    define _ASSERT_DEFINED#  endif#endif /* _STLP_WCE_EVC3 *//* * original call: TerminateProcess(GetCurrentProcess(), 0); * we substitute the GetCurrentProcess() with the result of the inline function * defined in kfuncs.h, since we then can avoid including <windows.h> at all. * all needed Win32 API functions are defined in <stl/_windows.h> */#ifndef _ABORT_DEFINED#  define _STLP_ABORT() TerminateProcess(reinterpret_cast<HANDLE>(66), 0)#  define _ABORT_DEFINED#endif// Notice: windows.h isn't included here anymore; all needed defines are in// stl/_windows.h now#endif /* _STLP_EVC_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?