友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第98章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






wsprintf(s2;〃%ld〃;m_totalHours);  



wsprintf(s3;〃%ld〃;m_totalMinutes);  



wsprintf(s4;〃%ld〃;m_totalSeconds);  



CString m_str=〃此时间范围包含:n完整天数  :〃+CString(s1)+  



〃n完整小时数:〃+CString(s2)+〃n完整分数  :〃+CString(s3)+  



〃n完整秒数  :〃+CString(s4);  



MessageBox(m_str);  



                                              



                 图10。 20 获取时间范围量包含的天、小时、分和秒数  



这段代码主要让读者体会使用CTimeSpan处理时间范围量的便捷。运 

行结果如图10。20所示,消息框中显示了希望获得的信息。  


…………………………………………………………Page 628……………………………………………………………

          第十一章 异常处理和诊断  



编写程序时出一些错误是难免的,在C++中称在软件或硬件中发生的 

不期望或不需要的事件为异常 (Exception)。MFC提供了两种异常处 

理机制:  



  l C++异常,在MFC 3。0和更高版本中可以使用  



  l MFC异常,在MFC 1。0和更高版本中可以使用  



在程序出错误后需要调试程序,MFC提供了许多诊断服务,可以让用 

户轻松的调试程序,这些诊断服务大多以特定宏和全局函数形式出 

现。  



本章将向读者介绍以下内容:  



  l 处理C++异常  



  l MFC异常  



  l 诊断服务  



               第一节 处理C++异常  



C++使用try、catch、throw三个关键字来实现异常处理。使用C++的 

异常处理能够使你的程序从异常状态中恢复。这些异常由处于正常控 

制流之外的代码来处理。  



  l 注意:  



  l 新的32位的异常处理机制支持C和C++。但是,它并非为C++专门设 

   计的。你应 当保证你的代码非常适合于C++的异常处理,并且C++ 

   的异常处理是相当灵活的,它可以处理任何类型的异常。  



异常处理机制允许程序对严重的和没有预料到的问题做出响应。一个 

异常块由下列三个部分组成:  



  l try块  



标志你认为可能会出现异常的代码。  



  l catch块  


…………………………………………………………Page 629……………………………………………………………

紧跟着try块,里面包含了处理异常的代码。  



  l throw块  



抛出一个异常,激活catch块中的相应的异常处理代码。  



异常处理的机制比较简单,首先你将有可能出现问题的代码放在try 

块中,然后在catch块中放进用来处理异常的代码。如果在try块中的 

代码抛出一个异常,try块迅速退出执行,程序将转入catch块中执行 

相应的异常处理代码。  



                   第二节 MFC异常  



在MFC中CException类是所有异常类的基类,它是一个抽象类,你不 

能使用它的对象,只能创建它的派生类的对象。它有两个公用方法: 

GetErrorMessage 和ReportError ,分别用于查找描述异常的 

信息和为用户显示一个错误信息的信息对话框。  



CException类包含以下基类 (如图11。1所示),并提供了THROW、 

THROW_LAST、TRY、CATC、  AND_CATCH、  END_CATCH这些宏用来处理 

异常。  



                                 



                  图11。 1 CException的基类  



   (1) CArchiveException  



一个CArchiveException用来描述序列化异常状态。它包含了一个数 

据成员m_cause用来表现异常的原因。它可能为以下值:  


…………………………………………………………Page 630……………………………………………………………

none :没有错误发生  



generic:未指定的错误  



readOnly:试图写入一个为载入而打开的文档  



endOfFile:当读取一个文档时到达文档尾部  



writeOnly:试图读取一个为存储而打开的文档  



badIndex:非法文件格式  



badClass:试图读一个对象到一个错误类型对象中  



badSchema:试图读一个对象,它带有不同的类的版本  



另外MFC还提供AfxThrowArchiveException 函数来抛出一个存档 

文件异常,形式如下:  



void AfxThrowArchiveException( int cause; LPCTSTR lpszArchiveName );  



   (2) CDaoException  



一个CDaoException类对象用来表示基于数据访问对象 (DAO;data  

access   objects)的MFC数据库类的异常。这个异常类包含三个决定 

异常原因的成员变量,这三个成员变量是:  



m_scode:描述与异常相关的SCODE代码  



m_pErrorInfo:包含用于所有MFC的DAO类的所有异常的扩展错误代码  



m_nAfxDaoError:包含DAO错误对象的指向CDaoErrorInfo结构的指针  



这个类有下列两个操作:  



GetErrorCount  获取在数据库引擎异常集合中的异常数 目  



GetErrorInfo  获取在异常集合中相似对象的错误信息  



MFC中的AfxThrowDaoException()函数抛出一个CDaoException类型的 

异常,使用如下形式:  



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 
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!