国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VS2010/MFC編程入門之四十六(MFC常用類:MFC異常處理)
上一節(jié)中雞啄米講了CFile文件操作類,本節(jié)主要來說說MFC異常處理。
雞啄米C++編程入門系列的最后一節(jié)雞啄米:C++編程入門系列之五十(異常處理)中,雞啄米講了C++標(biāo)準(zhǔn)異常的處理機(jī)制,如果你還沒有學(xué)過這方面內(nèi)容,可以到那節(jié)教程中去學(xué)習(xí)下。
MFC異常處理與C++標(biāo)準(zhǔn)異常處理是類似的,只是它在拋出和捕獲異常時(shí)使用了一些宏,另外還將異常封裝到了CException類及其派生類中。下面就分別講解這些宏與異常類。
MFC異常宏
MFC提供的異常處理宏包括TRY、CATCH、AND_CATCH、END_CATCH、THROW、THROW_LAST等,大家看著名稱是不是與C++標(biāo)準(zhǔn)異常處理的關(guān)鍵字相似?它們實(shí)際上就是在try、catch和throw的基礎(chǔ)上定義的。雞啄米下面貼出MFC中這些宏的定義:
C++代碼
/////////////////////////////////////////////////////////////////////////////
// Exception macros using try, catch and throw
//  (for backward compatibility to previous versions of MFC)
#define TRY { AFX_EXCEPTION_LINK _afxExceptionLink; try {
#define CATCH(class, e) } catch (class* e) \
{ ASSERT(e->IsKindOf(RUNTIME_CLASS(class))); \
_afxExceptionLink.m_pException = e;
#define AND_CATCH(class, e) } catch (class* e) \
{ ASSERT(e->IsKindOf(RUNTIME_CLASS(class))); \
_afxExceptionLink.m_pException = e;
#define END_CATCH } }
#define THROW(e) throw e
#define THROW_LAST() (AfxThrowLastCleanup(), throw)
// Advanced macros for smaller code
#define CATCH_ALL(e) } catch (CException* e) \
{ { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); \
_afxExceptionLink.m_pException = e;
#define AND_CATCH_ALL(e) } catch (CException* e) \
{ { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); \
_afxExceptionLink.m_pException = e;
#define END_CATCH_ALL } } }
#define END_TRY } catch (CException* e) \
{ ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); \
_afxExceptionLink.m_pException = e; } }
可以看出這些宏的定義中都包含了相應(yīng)的C++異常處理關(guān)鍵字,本質(zhì)上還是要通過try、catch和throw實(shí)現(xiàn)。
MFC異常類
MFC將對異常的處理封裝到了異常類--CException類及其子類中。其實(shí)即使我們不使用MFC異常宏而是使用C++標(biāo)準(zhǔn)異常處理的話,也是會(huì)用到MFC的CException類及其子類的。MFC異常類及其含義如下表:
MFC異常類 含義
CSimpleException 資源緊張異常的基類
CInvalidArgException 無效參數(shù)異常
CMemoryException 內(nèi)存不足
CNotSupportedException 響應(yīng)對不支持服務(wù)的請求
CArchiveException 存檔/序列化異常
CFileException 文件異常
CResourceException Windows 資源分配異常
COleException OLE 異常
CDBException 數(shù)據(jù)庫異常(ODBC 類)
COleDispatchException 調(diào)度(自動(dòng)化)異常
CUserException 用消息框警告用戶然后引發(fā)一般 CException 的異常
CDaoException 數(shù)據(jù)庫異常(DAO 類)
CInternetException 網(wǎng)絡(luò)異常
MFC異常處理
MFC異常處理的TRY塊的形式如下:
TRY
{
復(fù)合語句
}
CATCH (MFC異常類名, 變量名)
{
復(fù)合語句
}
AND_CATCH (MFC異常類名, 變量名)
{
復(fù)合語句
}
AND_CATCH (MFC異常類名, 變量名)
{
復(fù)合語句
}
......
END_CATCH
說明:TRY后的一對大括號(hào)內(nèi)包含了可能會(huì)拋出異常的代碼塊;用CATCH子句捕獲并處理異常,它捕獲的是指向異常對象的指針,小括號(hào)中的“MFC異常類名”就是CException類或其子類的名稱,變量名代表的就是“MFC異常類名”類型的指針變量;如果拋出的異常類型與CATCH子句中的不一致,則對后面的所有AND_CATCH子句依次檢查,若子句的異常類型與拋出異常類型一致則由其捕獲并處理此異常;最后用END_CATCH結(jié)束整個(gè)TRY塊。
注意:MFC異常宏只能捕獲處理CException及其子類類型的異常。
我們在使用MFC類時(shí),有些會(huì)自動(dòng)拋異常,當(dāng)然我們可以在需要的情況下使用AfxThrow******()自己拋異常,這里的******與上面MFC異常類列表中的各個(gè)異常類對應(yīng),例如拋文件異??梢允褂肁fxThrowFileException(),參數(shù)可以查閱MSDN。
MFC異常處理實(shí)例
雞啄米給大家一個(gè)簡單的MFC異常處理的代碼段,了解下如何使用MFC異常處理即可。
C++代碼
TRY
{
CFile file(_T("C:\\1.txt"), CFile::modeRead);   // 構(gòu)造CFile對象file,并以只讀模式打開一個(gè)文件,如果不存在則拋出CFileException異常
}
CATCH (CFileException, e)
{
if (e->m_cause == CFileException::fileNotFound)
{
// 如果捕獲到CFileException異常且為文件未找到時(shí),彈出提示對話框
MessageBox(_T("file not found!"));
return;
}
}
END_CATCH
上面這段代碼的意義很簡單,就是打開一個(gè)文件C:\1.txt,如果此文件不存在,則拋出CFileException異常,由CATCH子句捕獲后判斷是否是文件未找到,如果是則彈出提示對話框并返回。
再將上面的代碼稍微修改下,以演示AfxThrow******()拋異常的用法:
C++代碼
TRY
{
AfxThrowFileException(CFileException::fileNotFound);   // 手動(dòng)拋出CFileException異常
}
CATCH (CFileException, e)
{
if (e->m_cause == CFileException::fileNotFound)
{
// 如果捕獲到CFileException異常且為文件未找到時(shí),彈出提示對話框
MessageBox(_T("file not found!"));
return TRUE;
}
}
END_CATCH
上面這段代碼執(zhí)行時(shí),在CATCH子句中會(huì)捕獲到文件異常。
最后提醒大家一下,MFC的建議是不再使用MFC異常宏,而是直接使用C++標(biāo)準(zhǔn)異常,它更加靈活。雞啄米謝謝您對本站的持續(xù)關(guān)注,希望?;貋砜纯?。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Visual C++中的異常處理淺析
A Visual C Exception FAQ
理解MFC文檔/視圖框架
MFC單文檔程序架構(gòu)解析
第三章 CObject類
MFC類中獲得其它類指針
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服