晓寒的小屋

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

程序员博客   首页  新随笔  订阅  管理  登录 
 
晓寒 阅读(1053) 评论(5)
/**
*  @file     CHException.h
*  @class    CHException
*  @author   flyingleaf
*  @version  1.0.0.0
*  @date     2005-04-01
*  @remarks  您可以任使用此文件,但是需要保留本声明
*/

#ifndef _XHJ_CHException_h
#define _XHJ_CHException_h

#include 
<windows.h>
#include 
<cstdio>

using namespace std;

namespace XHJ
{
    
class CHException
    
{
    
public:
        CHException(): m_File(NULL), m_Line(
-1)
        
{
            strcpy(m_Reason ,
"Unknown");
        }


        
//这里的reason不可以是const 因为FormatMessage使用的不是const
        CHException(const char* file,    const int& line,
               DWORD reason): m_File(file), m_Line(line)
        
{
            FromatErrorCode(m_Reason, reason);
        }


        CHException(
const char* file,    const int& line,
            
const char* reason) :  m_File(file), m_Line(line)
        
{
            strcpy( m_Reason, reason);
        }
    

        
const char* File() const return m_File; }
        
const int Line() const return m_Line; }
        
const char* Reason() const return m_Reason; }
        
void Throw() const
        
{
            
throw *this;
        }


    
protected:
        
bool FromatErrorCode(char* reason, DWORD& errorCode) 
        

            
if( reason == NULL ) return false;

            LPVOID lpMsgBuf 
= NULL;

            FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER 
| 
                FORMAT_MESSAGE_FROM_SYSTEM,
                NULL,
                errorCode,
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (LPTSTR) 
&lpMsgBuf,
                
0, NULL );

            sprintf(reason,    
"%s",lpMsgBuf); 

            LocalFree(lpMsgBuf);
            
return true;
        }


    
private:
        
const char* m_File;
        
const int   m_Line;
        
char m_Reason[1024];
    }
;

    
class CHUserException : public CHException
    
{
    
public:
        CHUserException(): CHException()
        
{
        }


        CHUserException(
const char* file,    const int& line,
            DWORD reason) : CHException(file, line, reason)
        
{
        }
        

        CHUserException(
const char* file,    const int& line,
            
const char* reason) : CHException(file, line, reason)
        
{
        }
    
    }
;
}

#endif

没有任何可解释的。

评论列表
hpho
re: 基础库___异常类
需要把成员都弄成是virtual吗?
FromatErrorCode并会有在构造函数内有多态行为!
阿甘
re: 基础库___异常类
up,特别是File,Line什么的,还有就是为什么不从c++的标准异常继承。
晓寒
re: 基础库___异常类
3ks 两位.

to[hpho]
FromatErrorCode并会有在构造函数内有多态行为??什么意思?

发表评论
切换编辑模式