关于程序里的一些根本的“断言”和“序列化”的预处理定义
关于程序里的一些基本的“断言”和“序列化”的预处理定义
**macro.h
#pragma once #ifdef MHBQ #define MITC_HBQ_EXT __declspec(dllexport) #else #define MITC_HBQ_EXT __declspec(dllimport) #endif #define _MITC_HBQ_BEGIN namespace MHbq { #define _MITC_HBQ_END } #define _ASSERTE_RT(expr) \ _ASSERTE(expr); \ if(!(expr)) return; \ #define _ASSERTE_RT_BL(expr) \ _ASSERTE(expr); \ if(!(expr)) return FALSE; \ #define _ASSERTE_RT_UI(expr) \ _ASSERTE(expr); \ if(!(expr)) return 0; \ #define _ASSERTE_RT_DBL(expr) \ _ASSERTE(expr); \ if(!(expr)) return 0.; \ #define GETSTR(X) #X const long lEndVersion = 999; //结束版本号 //预处理保存 #define _PRESAVE(beginMark) \ CFile* pFile = ar.GetFile(); \ { \ CString strbeginMark(beginMark); \ ar << strbeginMark; \ } \ //开始保存一个版本的数据 #define _BEGINESAVE(version) \ {\ ar << version; \ ar.Flush(); \ ULONGLONG posBegine = pFile->GetPosition();\ LONGLONG dLen = 3; \ ar << dLen; \ { \ //结束保存一个版本的数据 #define _ENDSAVE\ } \ ar.Flush(); \ ULONGLONG posEnd = pFile->GetPosition();\ LONG posOffset = LONG(posBegine - posEnd);\ /*ULONGLONG lngFile = */pFile->Seek(posOffset, CFile::current); \ posOffset = - posOffset; \ pFile->Write(&posOffset, sizeof(LONGLONG)); \ pFile->SeekToEnd(); \ } //保存后处理 #define _POSTSAVE \ ar << lEndVersion; \ ar.Flush();\ pFile->SeekToEnd(); \ //预处理打开 #define _PREOPEN(beginMarkCheck) \ int iVersion = -1; \ LONGLONG dLen = 0; \ TCHAR *char1 = NULL; \ CString strMark(_T("")); \ ar >> strMark; \ _ASSERT(strMark==beginMarkCheck); \ OutputDebugString(strMark);\ while (ar >>iVersion,iVersion < lEndVersion) \ { \ ar >> dLen; \ switch(iVersion) \ { \ //打开后处理 #define _POSTOPEN \ default: \ { \ char1 = new TCHAR[(size_t)dLen]; \ LONGLONG lngReadLen = dLen - sizeof(LONGLONG); \ if (lngReadLen > 0) \ { \ ar.Read(&char1,(UINT)lngReadLen); \ delete []char1; char1 = NULL;\ }\ } \ break; \ } \ } \ if ( iVersion == lEndVersion) \ { \ int i = 0; \ i = iVersion; \ \ } \