Visual C++中的异常处理浅析(片段)

3.2 MFC 异常处理类

  MFC较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:

异常类含义
CMemoryException内存不足
CFileException文件异常
CArchiveException存档/序列化异常
CNotSupportedException响应对不支持服务的请求
CResourceExceptionWindows 资源分配异常
CDaoException数据库异常(DAO 类)
CDBException数据库异常(ODBC 类)
COleExceptionOLE 异常
COleDispatchException调度(自动化)异常
CUserException用消息框警告用户然后引发一般 CException 的异常

  标准C++的异常处理可以处理任意类型的异常,而3.1节的MFC 宏则只能处理CException 的派生类型,下面我们看一个CFileException的使用例子:

#include <iostream.h>
#include "afxwin.h"

int main()
{
 TRY
 {
  CFile f( "d:\\1.txt", CFile::modeWrite );
 }
 CATCH( CFileException, e )
 {
  if( e->m_cause == CFileException::fileNotFound )
   cout << "ERROR: File not found\n" << endl; 
 }
 END_CATCH 
}

  在这个程序中,如果D盘根目录下不存在"1.TXT"这个文件,将抛出CFileException异常,而且错误原因成员变量m_cause被设置为fileNotFound,我们以CATCH( CFileException, e )就可以捕获到。错误原因被定义为CFileException中的枚举(enum),如下:

enum {
 none,
 generic,
 fileNotFound,
 badPath,
 tooManyOpenFiles,
 accessDenied,
 invalidFile,
 removeCurrentDir,
 directoryFull,
 badSeek,
 hardIO,
 sharingViolation,
 lockViolation,
 diskFull,
 endOfFile
};

  我们在使用MFC相关类时,MFC会自动抛出异常,当然我们也可以自行在程序中利用AfxThrowXXXException()抛出各种类型的异常,其中的XXX与前文的MFC异常类表对应。我们看AfxThrowFileException的例子:

#include <iostream.h>
#include "afxwin.h"

int main()
{
 TRY
 {
  AfxThrowFileException(CFileException::fileNotFound);
 }
 CATCH( CFileException, e )
 {
  if( e->m_cause == CFileException::fileNotFound )
   cout << "ERROR: File not found\n" << endl; 
 }
 END_CATCH 
}

  在此程序中,我们在TRY块自行利用MFC提供的全局函数AfxThrowFileException抛出了CFileException异常,其后在CATCH块抓住了这个异常。

  MFC建议不再使用TRY、CATCH和THROW宏,而是直接使用标准C++的方式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值