《C语言实例教程(PDF格式)》第131章


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的发布版本中,它仍对参数进行测试,但是当参数为假时,不 
弹出诊断信息对话框。
下面这段
小说推荐
返回首页返回目录