?? commexception.hpp
字號:
/** * 通用異常對象類 Version 2.0 * * Create: 2004-07-25 Modify: 2005-04-18 Complete: 2005-04-18 */// 本類提供的功能如下:// 如果編譯環(huán)境提供異常處理機(jī)制,則throw異常對象// 如果編譯環(huán)境不提供異常處理機(jī)制,則將異常類屬性設(shè)置為最近的錯(cuò)誤。#ifndef __COMMEXCEPTION_H__#define __COMMEXCEPTION_H__#include "cfile_utils.hpp"// 根據(jù)錯(cuò)誤號生成業(yè)務(wù)編碼CString BuildCNAPSAppCode(int nErrCode);// 根據(jù)錯(cuò)誤號生成業(yè)務(wù)編碼typedef CString (* BuildAppCodeProc) (int nErrCode);// 通用異常類class CommException{public: // 構(gòu)造函數(shù) CommException(LPCSTR sFileName,int nLine,int nErrLevel,int nErrCode,LPCSTR sAppCode,LPCSTR sErrText) { m_nLine = nLine; m_nErrCode = nErrCode; m_nErrLevel = nErrLevel; if(!IsEmptyStr(sFileName)) m_strFileName = CFile::ExtractFileName(sFileName); if(!IsEmptyStr(sErrText)) m_strErrText = sErrText; if(!IsEmptyStr(sAppCode)) m_strAppCode = sAppCode; else m_strAppCode = m_hProc(m_nErrCode); DEBUG("THROW_OUT:: %s", ToString().GetBuffer(0)); } /* -- 舊版本構(gòu)造函數(shù) CommException(int nErrCode,LPCSTR sErrText) { m_nErrCode = nErrCode; if(!IsEmptyStr(sErrText)) m_strErrText = sErrText; m_nLine = 0; m_nErrLevel = 0; m_strFileName = ""; m_strAppCode = BuildAppCode(m_nErrCode); DEBUG(ToString().GetBuffer(0)); } */ CString GetFileName() { return m_strFileName;} int GetLine() { return m_nLine; } int GetErrLevel() { return m_nErrLevel; }#ifdef WIN32 int GetErrCode() { return m_nErrCode; }#endif CString GetErrText() { return m_strErrText; } CString GetAppCode() { return m_strAppCode; } // 組織異常輸出信息 CString ToString(); // 輸出異常信息(stderr) void Print(); // 設(shè)置業(yè)務(wù)碼生成函數(shù) static void SetBuildAppCodeProc(BuildAppCodeProc hProc) { m_hProc = hProc; } // 獲取最近的錯(cuò)誤號(only use in none-throw mode) static int GetLastErrCode(); // 獲取最近的業(yè)務(wù)編碼(only use in none-throw mode) static CString GetLastAppCode(); // 獲取最近的錯(cuò)誤信息(only use in none-throw mode) static CString GetLastErrText(); // 清除全局錯(cuò)誤信息(only use in none-throw mode) static void ClearError();private:#ifndef WIN32 int GetErrCode() { return m_nErrCode; }#endif CString m_strFileName; // 異常文件 int m_nLine; // 異常位置 int m_nErrCode; // 異常編碼 int m_nErrLevel; // 錯(cuò)誤級別 CString m_strAppCode; // 業(yè)務(wù)編碼 CString m_strErrText; // 異常信息 static BuildAppCodeProc m_hProc; // 業(yè)務(wù)碼生成函數(shù)};// 拋出錯(cuò)誤號+錯(cuò)誤信息void ThrowCommException(int nErrCode,LPCSTR sErrText,...);// 拋出錯(cuò)誤文件+錯(cuò)誤行+錯(cuò)誤號+錯(cuò)誤信息void ThrowCommException(LPCSTR sFileName,int nLine, int nErrLevel, int nErrCode, LPCSTR sErrText,...);// 拋出錯(cuò)誤文件+錯(cuò)誤行+錯(cuò)誤號+應(yīng)用碼+錯(cuò)誤信息void ThrowCommException(LPCSTR sFileName, int nLine, int nErrLevel, int nErrCode, LPCSTR sAppCode, LPCSTR sErrText,...);// 拋出文件中歸檔的錯(cuò)誤void ThrowCommException(LPCSTR sFileName,int nLine, LPCSTR sErrFile,int nErrCode,...);// 拋出文件中歸檔的錯(cuò)誤+附加信息void ThrowCommExceptionExt(LPCSTR sFileName,int nLine, LPCSTR sErrFile,int nErrCode,LPCSTR sExtMsg);#ifdef NONE_THROW// 拋出錯(cuò)誤號+錯(cuò)誤信息(宏)#define \ ThrowException(nErrCode,sErrText) \ { \ ThrowCommException(__FILE__, __LINE__, 0, nErrCode, sErrText); \ return nErrCode; \ }// 拋出歸檔的錯(cuò)誤號+附加信息(配置文件)#define \ ThrowExceptionExt(sFileName,nErrCode,sExtMsg) \ { \ ThrowCommExceptionExt(__FILE__, __LINE__, sFileName, nErrCode, sExtMsg); \ return nErrCode; \ }#define ClearFailStatus() { CommException::ClearError(); }#define ExitOnFail() { if(CommException::GetLastErrCode()!=0) return CommException::GetLastErrCode(); }#else#define \ ThrowException(nErrCode,sErrText) \ { \ ThrowCommException(__FILE__, __LINE__, 0, nErrCode, sErrText); \ }#define \ ThrowExceptionExt(sFileName,nErrCode,sExtMsg) \ { \ ThrowCommExceptionExt(__FILE__,__LINE__, sFileName, nErrCode, sExtMsg); \ }#define ClearFailStatus() ;#define ExitOnFail() ;#endif#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -