📄 commexception.hpp
字号:
/** * 通用异常对象类 Version 2.0 * * Create: 2004-07-25 Modify: 2005-04-18 Complete: 2005-04-18 */// 本类提供的功能如下:// 如果编译环境提供异常处理机制,则throw异常对象// 如果编译环境不提供异常处理机制,则将异常类属性设置为最近的错误。#ifndef __COMMEXCEPTION_H__#define __COMMEXCEPTION_H__#include "cfile_utils.hpp"// 根据错误号生成业务编码CString BuildCNAPSAppCode(int nErrCode);// 根据错误号生成业务编码typedef CString (* BuildAppCodeProc) (int nErrCode);// 通用异常类class CommException{public: // 构造函数 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)); } /* -- 旧版本构造函数 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(); // 设置业务码生成函数 static void SetBuildAppCodeProc(BuildAppCodeProc hProc) { m_hProc = hProc; } // 获取最近的错误号(only use in none-throw mode) static int GetLastErrCode(); // 获取最近的业务编码(only use in none-throw mode) static CString GetLastAppCode(); // 获取最近的错误信息(only use in none-throw mode) static CString GetLastErrText(); // 清除全局错误信息(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; // 错误级别 CString m_strAppCode; // 业务编码 CString m_strErrText; // 异常信息 static BuildAppCodeProc m_hProc; // 业务码生成函数};// 抛出错误号+错误信息void ThrowCommException(int nErrCode,LPCSTR sErrText,...);// 抛出错误文件+错误行+错误号+错误信息void ThrowCommException(LPCSTR sFileName,int nLine, int nErrLevel, int nErrCode, LPCSTR sErrText,...);// 抛出错误文件+错误行+错误号+应用码+错误信息void ThrowCommException(LPCSTR sFileName, int nLine, int nErrLevel, int nErrCode, LPCSTR sAppCode, LPCSTR sErrText,...);// 抛出文件中归档的错误void ThrowCommException(LPCSTR sFileName,int nLine, LPCSTR sErrFile,int nErrCode,...);// 抛出文件中归档的错误+附加信息void ThrowCommExceptionExt(LPCSTR sFileName,int nLine, LPCSTR sErrFile,int nErrCode,LPCSTR sExtMsg);#ifdef NONE_THROW// 抛出错误号+错误信息(宏)#define \ ThrowException(nErrCode,sErrText) \ { \ ThrowCommException(__FILE__, __LINE__, 0, nErrCode, sErrText); \ return nErrCode; \ }// 抛出归档的错误号+附加信息(配置文件)#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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -