友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第53部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





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的发布版本中,它仍对参数进行测试,但是当参数为假时,不 

弹出诊断信息对话框。  



下面这段代码可以让用户对ASSERT和VERIFFY两个宏之间的差别有更 


…………………………………………………………Page 636……………………………………………………………

深入的了解,这段代码是在MFC的发布版本中编译的,之所以选择发 

布版本是因为在这段代码中两个宏后面的参数都为假,使用发布版本 

编译可以忽略这些错误。但是ASSERT不检测参数的真假,而VERIFY检 

测参数的真假,所以只能弹出一个对话框。  



在一个MFC的多文档应用程序Test中的OnDraw 函数中ToDo语句后 

面添加下面的代码:  



bool m_bValue=false;  



ASSERT(m_bValue & ASSERTMessage());  



VERIFY(m_bValue & VERIFYMessage());  



为CTestView类添加两个成员函数ASSERTMessage()和VERIFYMessage 

 ():  



bool CTestView::ASSERTMessage()  



{  



MessageBox(〃经过ASSERT检验〃);  



return true;  



}  



bool CTestView::VERIFYMessage()  



{  



MessageBox(〃经过VERIFY检验〃);  



return true;  



}  



在MFC的发布版本中编译并运行该程序,弹出如图11。3所示的消息 

框,显示 “经过VERIFY检验”,说明VERIFY检测了它的参数,而 

ASSERT没有检测其参数。  



                                            



                              图11。 3 VERIFY示例  



     (3) TRACE  


…………………………………………………………Page 637……………………………………………………………

TRACE宏的用法如下:  



TRACE( exp )  



其中的参数exp定义了一组数量可变的参数。  



TRACE是一个在程序运行时跟踪变量数值的便捷的方法,它的用法和 

Printf完全相同。  



   l 注意:  



   l 使用TRACE一次最多可以显示512个字符,而且这个宏也只在MFC的 

    调试版本中有效。  



下面的例子使用TRACE宏在程序运行时跟踪变量m_value的值。  



代码如下:  



int m_value=100;  



for(int i=0;i
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!