#ifndef WinCEStub_h #define WinCEStub_h #include "basetsd_ce.h" #include #include #define InterlockedExchangePointer( pv, v) InterlockedExchange( (long*)pv, (long)v) #define SetWindowLongPtr SetWindowLong #define GetWindowLongPtr GetWindowLong // winuser.h #define GWLP_WNDPROC GWL_WNDPROC #define GWLP_STYLE GWL_STYLE #define GWLP_EXSTYLE GWL_EXSTYLE #define GWLP_USERDATA GWL_USERDATA #define GWLP_ID GWL_ID // from basetsd.h /*#define LongToHandle( h) ((HANDLE)(LONG_PTR) (h)) #define PtrToUint( p ) ((UINT)(UINT_PTR) (p) ) #define PtrToInt( p ) ((INT)(INT_PTR) (p) ) #define IntToPtr( i ) ((VOID *)(INT_PTR)((int)i)) #define UIntToPtr( ui ) ((VOID *)(UINT_PTR)((unsigned int)ui)) #define LongToPtr( l ) ((VOID *)(LONG_PTR)((long)l)) #define ULongToPtr( ul ) ((VOID *)(ULONG_PTR)((unsigned long)ul)) #define UlongToPtr(ul) ULongToPtr(ul) #define UintToPtr(ui) UIntToPtr(ui) typedef ULONG_PTR SIZE_T, *PSIZE_T; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; */ // from winbase.h #define NORMAL_PRIORITY_CLASS 0x00000020 // from winbase.h #define LOCKFILE_FAIL_IMMEDIATELY 0x00000001 #define LOCKFILE_EXCLUSIVE_LOCK 0x00000002 // #define CSIDL_FLAG_CREATE 0x8000 // new for Win2K, or this in to force creation of folder // stdlib.d defined in sapiguid.cpp void *bsearch( const void *key, const void *base, size_t num, size_t width, int ( __cdecl *compare ) ( const void *elem1, const void *elem2 ) ); // Fix misaligment exception #if defined (_M_ALPHA)||defined(_M_MRX000)||defined(_M_PPC)||defined(_SH4_) #undef UNALIGNED #define UNALIGNED __unaligned #endif // WCE does not have LockFileEx function. We do need emulate this functionality. class CWCELock { public: CWCELock( DWORD dwFlags, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED pOverlapped): m_dwFlags(dwFlags), m_nNumberOfBytesToLockLow(nNumberOfBytesToLockLow), m_nNumberOfBytesToLockHigh(nNumberOfBytesToLockHigh), m_Offset(0), m_OffsetHigh(0), hEvent(0) { // memcpy(&m_Overlapped, pOverlapped, sizeof(OVERLAPPED)); if (pOverlapped) { m_Offset = pOverlapped->Offset; m_OffsetHigh = pOverlapped->OffsetHigh; hEvent = pOverlapped->hEvent; } m_ProcessID = ::GetCurrentProcessId(); } ~CWCELock() { m_Offset = 0; m_OffsetHigh = 0; hEvent = 0; m_ProcessID = 0; } /* BOOL IsEqual( DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED pOverlapped ) { if ( nNumberOfBytesToLockLow==m_nNumberOfBytesToLockLow && nNumberOfBytesToLockHigh==m_nNumberOfBytesToLockHigh && !memcmp(&m_Overlapped, pOverlapped, sizeof(OVERLAPPED)) ) { return TRUE; } else { return FALSE; } } */ private: DWORD m_dwFlags; // lock options DWORD m_nNumberOfBytesToLockLow; // low-order word of length DWORD m_nNumberOfBytesToLockHigh; // high-order word of length DWORD m_Offset; DWORD m_OffsetHigh; HANDLE hEvent; DWORD m_ProcessID; }; typedef CSPList CWCELockList; class CWCELocks { public: CWCELocks() { m_pCWCELockList = new CWCELockList(); } ~CWCELocks() { while(!m_pCWCELockList->IsEmpty()) { CWCELock* pCWCELock = m_pCWCELockList->RemoveHead(); delete pCWCELock; } delete m_pCWCELockList; } BOOL LockFileEx( IN HANDLE hFile, IN DWORD dwFlags, IN DWORD dwReserved, IN DWORD nNumberOfBytesToLockLow, IN DWORD nNumberOfBytesToLockHigh, IN LPOVERLAPPED lpOverlapped ) { return TRUE; } BOOL UnlockFileEx( IN HANDLE hFile, IN DWORD dwReserved, IN DWORD nNumberOfBytesToUnlockLow, IN DWORD nNumberOfBytesToUnlockHigh, IN LPOVERLAPPED lpOverlapped ) { return TRUE; } private: CWCELockList* m_pCWCELockList; }; #endif //WinCEStub_h