|
|
/*****************************************************************************
* Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved
*
* All Rights Reserved
*
* This software is furnished under a license and may be used and copied
* only in accordance with the terms of such license and with the inclusion
* of the above copyright notice. This software or any other copies thereof
* may not be provided or otherwise made available to any other person. No
* title to and ownership of the software is hereby transferred.
*****************************************************************************/
//============================================================================
//
// CGlobal.h -- Global declarations
//
// Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved
//
// Revisions: 6/26/98 a-kevhu Created
//
//============================================================================
#ifndef __CGLOBAL_H__
#define __CGLOBAL_H__
#include <windows.h>
#include <process.h>
#include <winerror.h>
#include <stdio.h>
#include <brodcast.h>
#include <dllutils.h>
#define ERR_LOG_FILE _T("c:\\temp\\test.txt")
// forward class declarations to make the compiler happy...
class CWaitableObject; class CWaitableCollection; class CKernel; class CMutex; class CSemaphore; class CEvent; class CThread; class CCriticalSec; class CAutoLock; class CMonitor; class CSharedMemory; class CMailbox;
// defined symbol determines if CThrowError throws exceptions
// or just prints debug error messages...
#ifndef __C_THROW_EXCEPTIONS__
#define __C_THROW_EXCEPTIONS__ TRUE
#endif
// for higher level objects which might have to check internal
// object status when exceptions are disabled, these macros can be useful...
// PTR is the smart pointer to check for NULL,
// STATUS is the variable in which to store an error code if an error is detected...
#if __C_THROW_EXCEPTIONS__
#define C_CHECK_AUTOPTR_OBJECT(PTR,STATUS) if ((PTR).IsNull()) { /*CThrowError(ERROR_OUTOFMEMORY);*/ LogMessage2(L"CAutoLock Error: %d", ERROR_OUTOFMEMORY); }
#else
#define C_CHECK_AUTOPTR_OBJECT(PTR,STATUS) if ((PTR).IsNull()) { (STATUS) = ERROR_OUTOFMEMORY; return; }
#endif
// SCODE is the return value to check,
// STATUS is the variable in which to store an error code if an error is detected...
#if __C_THROW_EXCEPTIONS__
#define C_CHECK_CREATION_STATUS(SCODE,STATUS) {}
#else
#define C_CHECK_CREATION_STATUS(SCODE,STATUS) if (((SCODE)!=NO_ERROR)&&((SCODE)!=ERROR_ALREADY_EXISTS)) { STATUS = (SCODE); return; }
#endif
//// error handling macro and function...
//#define CThrowError(dwStatus) CInternalThrowError((dwStatus), __FILE__, __LINE__)
//extern void CInternalThrowError( DWORD dwStatus, LPCWSTR lpFilename, int line);
// check handle for NULL and INVALID_HANDLE
inline BOOL CIsValidHandle( HANDLE hHandle) { return ((hHandle != NULL) && (hHandle != INVALID_HANDLE_VALUE)); }
// validate wait return codes...
inline BOOL CWaitSucceeded( DWORD dwWaitResult, DWORD dwHandleCount) { return (dwWaitResult < WAIT_OBJECT_0 + dwHandleCount); }
inline BOOL CWaitAbandoned( DWORD dwWaitResult, DWORD dwHandleCount) { return ((dwWaitResult >= WAIT_ABANDONED_0) && (dwWaitResult < WAIT_ABANDONED_0 + dwHandleCount)); }
inline BOOL CWaitTimeout( DWORD dwWaitResult) { return (dwWaitResult == WAIT_TIMEOUT); } inline BOOL CWaitFailed( DWORD dwWaitResult) { return (dwWaitResult == WAIT_FAILED); }
// compute object indices for waits...
inline DWORD CWaitSucceededIndex( DWORD dwWaitResult) { return (dwWaitResult - WAIT_OBJECT_0); }
inline DWORD CWaitAbandonedIndex( DWORD dwWaitResult) { return (dwWaitResult - WAIT_ABANDONED_0); }
// Log messages
inline DWORD LogMsg(LPCTSTR szMsg, LPCTSTR szFileName = ERR_LOG_FILE) { SYSTEMTIME systime; GetSystemTime(&systime); { TCHAR szTime[64]; ZeroMemory(szTime,sizeof(szTime)); wsprintf(szTime,_T("(%02d:%02d:%02d.%04d) "),systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds); LogMessage3((LPCWSTR)TOBSTRT(_T("%s%s")), TOBSTRT(szTime), TOBSTRT(szMsg)); } return 1; }
#endif
|