有时候程序在VC6.0中运行是正常的,但是用VS2008打开时会出现 CException不能实例化抽象类的问题。这是由于VC6.0 与VS2008对于CException类的定义不同。
解决方案:
MFC较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:
异常类 | 含义 |
CMemoryException | 内存不足 |
CFileException | 文件异常 |
CArchiveException | 存档/序列化异常 |
CNotSupportedException | 响应对不支持服务的请求 |
CResourceException | Windows 资源分配异常 |
CDaoException | 数据库异常(DAO 类) |
CDBException | 数据库异常(ODBC 类) |
COleException | OLE 异常 |
COleDispatchException | 调度(自动化)异常 |
CUserException | 用消息框警告用户然后引发一般 CException 的异常 |
所以只要把上面的CException与异常类相对应的就行!!!比如文件异常,改成CFileException就行!!!
可以使用下面的代码进行异常捕获:
try { } catch (CMemoryException* e) { e->ReportError(); } catch (CFileException* e) { e->ReportError(); } catch (CException* e) { e->ReportError(); }
注意需要保护头文件,#include <afxdao.h>