void AFXAPI AfxThrowDaoException( int nAfxDaoError = NO_AFX_DAO_ERROR; SCODE
scode = S_OK );
…………………………………………………………Page 631……………………………………………………………
(3) CDBException
一个CDBExceptio类的对象表示MFC数据库中的一种异常情况。这个类
包含两个用来决定异常原因的成员变量:
m_nRetCode:一个ODBC(Open Database Connectivity)返回的RETCODE
类型的代码
m_strError:包含一个描述错误信息的字符串
m_strStateNativeOrigin:包含描述带有ODBC错误代码的错误的字符
串
MFC中的AfxThrowDBException 函数抛出一个CDBException类型的
异常,使用如下形式:
void AfxThrowDBException( RETCODE nRetCode; CDatabase* pdb; HSTMT hstmt );
(3) CFileException
一个CFileException对象描述一个与文件相关的异常状态。这个类包
含三个描述异常原因的成员变量:
m_cause:包含与错误原因对应的代码。
m_lOsError:包含相关的操作系统错误数
m_strFileName:包含出现例外的文件名
成员变量m_cause可能为以下值:
none:没有错误发生
generic:未指定的错误
fileNotFound :文件不能定位错误
badPath :全部或部分路径无效
tooManyOpenFiles:达到允许打开的文件数 目
accessDenied :不能访问文件
invalidFile :试图访问一个无效的文件
…………………………………………………………Page 632……………………………………………………………
removeCurrentDir:删除正在操作中的目录
directoryFull:目录个数已满
badSeek :试图设置文件指针出错
hardIO :硬件出错
sharingViolation :共享出错
lockViolation :试图锁定已锁定的区域
diskFull :磁盘空间已满
endOfFile :到达文件结尾
MFC中的AfxThrowFileException 函数抛出一个CFileException类
型的异常,使用如下形式:
void AfxThrowFileException( int cause; LONG lOsError = –1; LPCTSTR lpszFileName
= NULL );
(4) CInternetException
一个CInternetException对象代表一个和Internet操作有关的异常状
态。它包含两个成员变量:
m_dwError:表示导致异常的错误
m_dwContext:和引起错误的操作有关的上下文变量
(5) CMemoryException
一个CMemoryException对象描述一个内存溢出异常。内存异常自动的
被new操作符抛出。
MFC中的AfxThrowMemoryException 函数抛出一个
CMemoryException类型的异常,使用如下形式:
void AfxThrowMemoryException( );
(6) CNotSupportedException
一个CNotSupportedException对象表示当不支持的特性被请求时发生
的异常,没有其它必要或可能的限制。
…………………………………………………………Page 633……………………………………………………………
MFC中的AfxThrowNotSupportedException 函数抛出一个
CNotSupportedException类型的异常,使用如下形式:
void AfxThrowNotSupportedException( );
(7) COleException
一个COleException对象表示和OLE操作有关的异常。它包含一个成员
变量m_sc来容纳异常原因的状态码。
MFC中的AfxThrowOleException 函数抛出一个COleException类型
的异常,使用如下形式:
void AFXAPI AfxThrowOleException( SCODE sc );
void AFXAPI AfxThrowOleException( HRESULT hr );
(8) COleDispatchException
一个COleDispatchException对象表现为OLE 自动化的关键部分所特有
的异常。它包含5个成员变量:
m_wCode: IDispatch特有的错误代码
m_strDescription:一个描述性错误
m_dwHelpContext:用于错误的Help上下文ID
m_strHelpFile:使用m_dwHelpContext的Help文件
m_strSource:产生异常的应用程序
MFC中的AfxThrowOleDispatchException 函数抛出一个
COleDispatchException类型的异常,使用如下形式:
void AFXAPI AfxThrowOleDispatchException( WORD wCode; LPCSTR lpszDescription;
UINT nHelpID = 0 );
void AFXAPI AfxThrowOleDispatchException( WORD wCode; UINT nDescriptionID;
UINT nHelpID = –1 );
(9) CResourceException
一个CResourceException对象表示当Windows不能定位或分配需要的
…………………………………………………………Page 634……………………………………………………………
资源时抛出的异常。
MFC中的AfxThrowOleDispatchException 函数抛出一个
CResourceException类型的异常,使用如下形式:
void AfxThrowResourceException( );
(10) CUserException
一个CUserException对象表示停止终端用户操作时抛出的异常。
MFC中的AfxThrowUserException 函数抛出一个CUserException类
型的异常,使用如下形式:
void AfxThrowUserException( );
第三节 诊断服务
上节讲述了使用异常处理来捕获程序中的错误,然而并非程序中所有
的错误都是可以捕获的,还会出现很多无法预知的错误,这些错误需
要在调试程序中发现并更正。MFC提供了许多诊断服务,供程序员调
试程序使用。
MFC提供的用于诊断程序的宏有:ASSERT、ASSERT_KINDOF、
ASSERT_VALID、DEBUG_NEW、TRACE、TRACE0、TRACE1、TRACE2、
TRACE3、VARIFY。本节将详细介绍ASSERT、VERIFY、TRACE 。
(1) ASSERT
这个宏的用法如下:
ASSERT( booleanExpression )
其中的参数booleanExpression是一个表达式或指针。
这个宏用来测试它的参数是否为真。如果参数不为真,这个宏就显示
一个诊断信息对话框,并终止程序的运行。如果参数为真,它不做任
何事情。诊断信息按照下面的形式显示:
Debug Assertion Failed!
Program:
File:
…………………………………………………………Page 635……………………………………………………………
Line:
其中Program Name是程序的的名称,File Names是出错的文件名,
num是出问题的诊断语句所在的行数。
诊断信息对话框如图11。2所示。
图11。 2 诊断输出信息
值得注意的是,ASSERT仅在MFC的调试 (Debug)版本中有效,在MFC
的发布 (Release)版本中,ASSERT语句不再有效,它不对参数进行
真假检测。
下面的代码中ASSERT作用是检查一个指向用户自定义的类CMyClass的
指针是否为空;代码如下:
CMyClass* m_pMyClass=new CMyClass;
ASSERT(m_pMyClass);
// 。。。。。。
(2) VERIFY
这个宏和ASSERT差不多,它的用法如下:
VERIFY( booleanExpression )
其中的参数booleanExpression是一个表达式或指针。
在MFC的调试版本中,VERIFY宏检测它的参数,如果参数不为真,弹
出如图1。2所示的诊断信息对话框。如果参数为真,它不做任何事
情。
在MFC的发布版本中,它仍对参数进行测试,但是当参数为假时,不
弹出诊断信息对话框。
下面这段
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 其他
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 其他
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 其他
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 其他
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 其他
- 最新章:第295章