MFC异常处理浅析[定义].pdfVIP

  • 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 异常处理类

文档评论(0)

1亿VIP精品文档

相关文档