195 lines
5.6 KiB
C
195 lines
5.6 KiB
C
#ifndef _MACROS_H_
|
|
#define _MACROS_H_
|
|
|
|
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
MACROS.H
|
|
|
|
Abstract:
|
|
|
|
Project agnostic utility macros
|
|
|
|
Author:
|
|
|
|
990518 dane Created.
|
|
990721 dane Removed ASSERTs from ROE_*. A failure does not
|
|
necessarily an ASSERT need.
|
|
georgema 000310 updated
|
|
|
|
Environment:
|
|
Win98, Win2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include <crtdbg.h>
|
|
|
|
#if _MSC_VER > 1000
|
|
|
|
// make the beginning and end of a namespace stand out
|
|
//
|
|
#define BEGIN_NAMESPACE(name) namespace name {
|
|
#define END_NAMESPACE(name) };
|
|
#define USING_NAMESPACE(name) using namespace name
|
|
#else
|
|
#define BEGIN_NAMESPACE(name)
|
|
#define END_NAMESPACE(name)
|
|
#define USING_NAMESPACE(name)
|
|
#endif // _MSC_VER > 1000
|
|
|
|
|
|
// Heap allocation...use CRT debug new when _DEBUG is defined
|
|
//
|
|
#ifdef _DEBUG
|
|
#define _NEW new(_CLIENT_BLOCK, _THIS_FILE_, __LINE__)
|
|
#else // ! _DEBUG
|
|
#define _NEW new
|
|
#endif // _DEBUG
|
|
|
|
#define _DELETE delete
|
|
|
|
// aliases for assertion macros
|
|
//
|
|
#ifdef ASSERT
|
|
#undef ASSERT
|
|
#endif // ASSERT
|
|
|
|
#ifdef VERIFY
|
|
#undef VERIFY
|
|
#endif // VERIFY
|
|
|
|
#ifdef _DEBUG
|
|
#define ASSERT(cond) _ASSERTE(cond)
|
|
#define VERIFY(cond) _ASSERTE(cond)
|
|
#else // NDEBUG
|
|
#define ASSERT(cond) ((void)0)
|
|
#define VERIFY(cond) (cond)
|
|
#endif // _DEBUG
|
|
|
|
// aliases for segment names
|
|
//
|
|
#ifdef DATASEG_READONLY
|
|
#undef DATASEG_READONLY
|
|
#endif // DATASEG_READONLY
|
|
#define DATASEG_READONLY ".rdata"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// RETURN ON ERROR macros
|
|
//
|
|
// ROE_HRESULT
|
|
// ROE_LRESULT
|
|
// ROE_POINTER
|
|
//
|
|
// Checks a return code or condition and returns a user-supplied error code if
|
|
// an error has occurred.
|
|
//
|
|
// Usage:
|
|
// TYPE Foo( )
|
|
// {
|
|
// TYPE status = Bar( );
|
|
// ROE_TYPE(status, ret);
|
|
//
|
|
// // continue processing...
|
|
// }
|
|
//
|
|
//
|
|
#define ROE_HRESULT(hr, ret) \
|
|
if (FAILED(hr)) \
|
|
{ \
|
|
LogError(0, _THIS_FILE_, __LINE__, \
|
|
_T("0x%08X 0x%08X\n"), \
|
|
hr, ret); \
|
|
return (ret); \
|
|
}
|
|
|
|
#define ROE_LRESULT(lr, ret) \
|
|
if (ERROR_SUCCESS != lr) \
|
|
{ \
|
|
LogError(0, _THIS_FILE_, __LINE__, \
|
|
_T("0x%08X 0x%08X\n"), \
|
|
lr, ret); \
|
|
return (ret); \
|
|
}
|
|
|
|
#define ROE_POINTER(p, ret) \
|
|
if (NULL == (p)) \
|
|
{ \
|
|
LogError(0, _THIS_FILE_, __LINE__, \
|
|
_T("0x%08X\n"), \
|
|
ret); \
|
|
return (ret); \
|
|
}
|
|
|
|
#define ROE_CONDITION(cond, ret) \
|
|
if (! (cond)) \
|
|
{ \
|
|
LogError(0, _THIS_FILE_, __LINE__, \
|
|
_T("0x%08X 0x%08X\n"), \
|
|
##cond, ret); \
|
|
return (ret); \
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CHECK macros
|
|
//
|
|
// CHECK_HRESULT
|
|
// CHECK_LRESULT
|
|
// CHECK_POINTER
|
|
// CHECK_MESSAGE
|
|
//
|
|
// Checks a return code or condition and returns a user-supplied error code if
|
|
// an error has occurred.
|
|
//
|
|
// Usage:
|
|
// TYPE Foo( )
|
|
// {
|
|
// TYPE status = Bar( );
|
|
// CHECK_TYPE(status);
|
|
//
|
|
// // continue processing...
|
|
// }
|
|
//
|
|
//
|
|
#define CHECK_HRESULT(hr) \
|
|
(FAILED(hr)) \
|
|
? LogError(0, _THIS_FILE_, __LINE__, _T("0x%08X"), hr), hr \
|
|
: hr
|
|
|
|
#define CHECK_LRESULT(lr) \
|
|
(ERROR_SUCCESS != lr) \
|
|
? LogError(0, _THIS_FILE_, __LINE__, _T("0x%08X"), lr), lr \
|
|
: lr
|
|
|
|
#define CHECK_POINTER(p) \
|
|
(NULL == (p)) \
|
|
? LogError(0, _THIS_FILE_, __LINE__, _T("NULL pointer"), p), p \
|
|
: p
|
|
|
|
#ifdef _DEBUG
|
|
#define CHECK_MESSAGE(hwnd, msg, wparam, lparam) \
|
|
{ \
|
|
LogInfo(0, _THIS_FILE_, __LINE__, \
|
|
_T("MESSAGE: 0x%08X, 0x%08X, 0x%08X, 0x%08X\n"), \
|
|
hwnd, msg, wparam, lparam); \
|
|
}
|
|
#else
|
|
#define CHECK_MESSAGE(hwnd, msg, wparam, lparam) ((void)0)
|
|
#endif // _DEBUG
|
|
|
|
|
|
// count of elements in an array
|
|
//
|
|
#define COUNTOF(array) (sizeof(array) / sizeof(array[0]))
|
|
|
|
#endif // _MACROS_H_
|
|
|
|
//
|
|
///// End of file: Macros.h ////////////////////////////////////////////////
|