- 25
- 0
- 约1.09万字
- 约 10页
- 2021-10-19 发布于福建
- 举报
处理异常之书籍有:
C++ primer
C++ exception handling (C++ 异常处理)
thinking in c++
Exception c++ 》
More Exception c++ 》
wocow3?
查阅 MSDN
这些 API 就算抛出异常也是 WIN32 异常,跟 C++ 异常不太一样
jixingzhong?
这些函数,查 MSDN 就可以了
根据文档说明就明白
MFC异常处理浅析
2008-12-15 23:46
MFC中异常处理的语法和语义构建在标准 C++异常处理语法和语义的基础之上,
其解决方案为:
MFC异常处理 = MFC 异常处理类 + 宏
3.1 宏
MFC定义了 TRY、CATCH(及 AND_CATCH、END_CATCH)和 THROW(及 THROW_LAST)
等用于异常处理的宏,其本质上也是标准 C++的 try 、catch 和 throw 的进一步
强化,由这些宏的定义可知:
#ifndef _AFX_OLD_EXCEPTIONS
#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; } }
这些宏在使用语法上,有如下特点:
(1)用 TRY 块包含可能产生异常的代码;
(2 )用 CATCH块检测并处理异常。要注意的是, CATCH块捕获到的不是异
常对象,而是指向异常对象的指针。此外, MFC靠动态类型来辨别异常对象;
(3 )可以在一个 TRY 块上捆绑多个异常处理捕获块,第一次捕获使用宏
CATCH,以后的使用 AND_CATCH,而 END_CATCH则用来结束异常捕获队列;
(4 )在异常处理程序内部,可以用 THROW_LAST再次抛出最近一次捕获的
异常。
3.2 MFC 异常处理类
您可能关注的文档
最近下载
- 2025年招标师评标标准一致性核查表专题试卷及解析.pdf VIP
- 2025年金融风险管理师空头对冲策略应用专题试卷及解析.pdf VIP
- 2026年江西制造职业技术学院单招职业适应性测试题库附答案解析.docx VIP
- 薄膜太阳能电池激光划线工艺精度控制方法.pdf VIP
- 2025年项目管理专业采购与项目人工智能应用专题试卷及解析.pdf VIP
- 2025年互联网营销师混合调研方法应用专题试卷及解析.pdf VIP
- 人音版六年级下册《游子吟》课件(共13张PPT无音频)(含音频+视频).ppt VIP
- 2024年黑龙江省绥化市肇东市肇东镇招聘社区工作者真题及答案详解一套.docx VIP
- 1994浙江定额.doc VIP
- 巨人通力G3001007(A)电气原理图.pdf VIP
原创力文档

文档评论(0)