#ifndef MACRO_HEAD_FILE #define MACRO_HEAD_FILE ////////////////////////////////////////////////////////////////////////////////// //常用常量 //无效数值 #define INVALID_BYTE ((BYTE)(0xFF)) //无效数值 #define INVALID_WORD ((WORD)(0xFFFF)) //无效数值 #define INVALID_DWORD ((DWORD)(0xFFFFFFFF)) //无效数值 ////////////////////////////////////////////////////////////////////////////////// //数组维数 #define CountArray(Array) (sizeof(Array)/sizeof(Array[0])) //无效地址 #define INVALID_IP_ADDRESS(IPAddress) (((IPAddress==0L)||(IPAddress==INADDR_NONE))) ////////////////////////////////////////////////////////////////////////////////// //存储长度 #ifdef _UNICODE #define CountStringBuffer CountStringBufferW #else #define CountStringBuffer CountStringBufferA #endif //存储长度 #define CountStringBufferA(String) ((UINT)((lstrlenA(String)+1)*sizeof(CHAR))) #define CountStringBufferW(String) ((UINT)((lstrlenW(String)+1)*sizeof(WCHAR))) //字符数组长度 #define CountStringW(sz) (sizeof(sz)>>1) #define CountStringA(sz) (sizeof(sz)) #ifdef UNICODE #define CountString CountStringW #else #define CountString CountStringA #endif ////////////////////////////////////////////////////////////////////////////////// //接口释放 #define SafeRelease(pObject) { if (pObject!=NULL) { pObject->Release(); pObject=NULL; } } //删除指针 #define SafeDelete(pData) { try { delete pData; } catch (...) { ASSERT(FALSE); } pData=NULL; } //关闭句柄 #define SafeCloseHandle(hHandle) { if (hHandle!=NULL) { CloseHandle(hHandle); hHandle=NULL; } } //删除数组 #define SafeDeleteArray(pData) { try { delete [] pData; } catch (...) { ASSERT(FALSE); } pData=NULL; } //校验宏 #define VERIFY_RETURN_FALSE(x) {if (!(x)){ ASSERT(0); return false; }} #define VERIFY_RETURN_TRUE(x) {if (!(x)){ ASSERT(0); return true; }} #define VERIFY_THROW(x,y) {if (!(x)){ ASSERT(0); throw (y); }} #define VERIFY_RETURN_VOID(x) {if (!(x)){ ASSERT(0); return; }} #define VERIFY_RETURN(x,y) {if (!(x)){ ASSERT(0); return (y); }} ////////////////////////////////////////////////////////////////////////////////// #endif