/*++ Copyright (c) 1994-1995 Microsoft Corporation All rights reserved. Module Name: Common.hxx Abstract: Standard macros/typedefs for include files. Author: Albert Ting (AlbertT) Revision History: --*/ #ifndef _COMMON_HXX #define _COMMON_HXX #ifdef __cplusplus extern "C" { #endif typedef HANDLE (WINAPI *pfCreateThread)( LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes SIZE_T dwStackSize, // initial thread stack size, in bytes LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function LPVOID lpParameter, // argument for new thread DWORD dwCreationFlags, // creation flags LPDWORD lpThreadId // pointer to returned thread identifier ); BOOL bSplLibInit( #ifdef __cplusplus pfCreateThread pfSafeCreateThread = NULL #else pfCreateThread pfSafeCreateThread #endif ); VOID vSplLibFree( VOID ); EXTERN_C DWORD WINAPIV StrCatAlloc( IN OUT PCTSTR *ppszString, ... ); EXTERN_C DWORD WINAPIV StrNCatBuff( IN PTSTR pszBuffer, IN UINT cchBuffer, ... ); typedef enum { kWindowsDir, kSystemWindowsDir, kSystemDir, kCurrentDir } EStrCatDir; EXTERN_C DWORD WINAPI StrCatSystemPath( IN LPCTSTR pszFile, IN EStrCatDir eDir, OUT LPTSTR *ppszFullPath ); EXTERN_C PTSTR SubChar( IN PCTSTR pszIn, IN TCHAR cIn, IN TCHAR cOut ); EXTERN_C HRESULT GetLastErrorAsHResult( VOID ); EXTERN_C HRESULT HResultFromWin32( IN DWORD dwError ); EXTERN_C HRESULT GetLastErrorAsHResultAndFail( void ); EXTERN_C HRESULT GetFileNamePart( IN PCWSTR pszFullPath, OUT PCWSTR *ppszFileName ); EXTERN_C BOOL BoolFromHResult( IN HRESULT hr ); EXTERN_C DWORD StatusFromHResult( IN HRESULT hr ); EXTERN_C BOOL BoolFromStatus( IN DWORD Status ); #ifdef __cplusplus } #endif #include "dbgmsg.h" // // This reverses a DWORD so that the bytes can be easily read // as characters ('prnt' can be read from debugger forward). // #define BYTE_SWAP_DWORD( val ) \ ( (val & 0xff) << 24 | \ (val & 0xff00) << 8 | \ (val & 0xff0000) >> 8 | \ (val & 0xff000000) >> 24 ) #define COUNTOF(x) (sizeof(x)/sizeof(*x)) #define BITCOUNTOF(x) (sizeof(x)*8) #define COUNT2BYTES(x) ((x)*sizeof(TCHAR)) #define OFFSETOF(type, id) ((DWORD)(ULONG_PTR)(&(((type*)0)->id))) #define OFFSETOF_BASE(type, baseclass) ((DWORD)(ULONG_PTR)((baseclass*)((type*)0x10))-0x10) #define ERRORP(Status) (Status != ERROR_SUCCESS) #define SUCCESSP(Status) (Status == ERROR_SUCCESS) // // COUNT and COUNT BYTES // typedef UINT COUNT, *PCOUNT; typedef UINT COUNTB, *PCOUNTB; typedef DWORD STATUS; // // Conversion between PPM (Page per minute), LPM (Line per minute) // and CPS (Character per second) // #define CPS2PPM(x) ((x)/48) #define LPM2PPM(x) ((x)/48) // // C++ specific functionality. // #ifdef __cplusplus const DWORD kStrMax = MAX_PATH; #if defined( CHECKMEM ) || DBG #define SAFE_NEW \ public: \ PVOID operator new(size_t size) { return ::SafeNew(size); } \ VOID operator delete(PVOID p, size_t) { ::SafeDelete(p); } \ private: #define DBG_SAFE_NEW \ public: \ PVOID operator new(size_t size) { return ::DbgAllocMem(size); } \ VOID operator delete(PVOID p, size_t) { ::DbgFreeMem(p); } \ private: #else #define SAFE_NEW #define DBG_SAFE_NEW #endif #define SIGNATURE( sig ) \ public: \ class TSignature { \ public: \ DWORD _Signature; \ TSignature() : _Signature( BYTE_SWAP_DWORD( sig )) { } \ }; \ TSignature _Signature; \ \ BOOL bSigCheck() const \ { return _Signature._Signature == BYTE_SWAP_DWORD( sig ); } \ private: #define ALWAYS_VALID \ public: \ BOOL bValid() const \ { return TRUE; } \ private: #define VAR(type,var) \ inline type& var() \ { return _##var; } \ inline type const & var() const \ { return _##var; } \ type _##var #define SVAR(type,var) \ static inline type& var() \ { return _##var; } \ static type _##var // // Allow debug extensions to be friends of all classes so that // they can dump private fields. Forward class definition here. // class TDebugExt; // // Include any common inlines. // #include "commonil.hxx" #endif // def __cplusplus #endif // _COMMON_HXX