现在的位置: 首页 > 综合 > 正文

Windows核心编程学习笔记——-25章

2012年10月07日 ⁄ 综合 ⁄ 共 1137字 ⁄ 字号 评论关闭

第25章 未处理异常、向量化异常与C++异常

本章纯粹是为了走过场,深入了解看书吧。

一、未处理异常:

1、如何出现:若异常过滤程序返回EXCEPTION_CONTINUE_SEARCH,系统继续在调用树的上层寻找异常过滤程序。若每个异常过滤程序都返回EXCEPTION_CONTINUE_SEARCH,就会遇到所谓的未处理异常。

2、解决方法:Windows函数SetUnhandledExceptionFilter给我们处理异常的最后机会,否则Windows就正式认为这个异常没有得到处理。应在进程初始化阶段调用这个函数。

PTOP_LEVEL_EXCEPTION_FILTERSetUnhandledExceptionFilter(

PTOP_LEVEL_EXCEPTION_FILTERpTopLevelExceptionFilter);

异常过滤函数原型必须与下相似:

LONG WINAPITopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo);

         注意:若以NULL为参数调用SetUnhandledExceptionFilter,则将由UnhandledExceptionFilter来处理全局未处理异常(当使用C/C++运行库时,在进程入口点函数执行前,C/C++运行库会安装一个默认的全局异常过滤程序:_CxxUnhandledExceptionFilter,此函数工作原理:首先检查异常是不是属于C++异常。若是,则结束时执行abort函数,后者将调用Kernel32.dll中的UnhandledExceptionFilter函数。若否,则返回EXCEPTION_CONTINUE_SEARCH,来让Windows来处理这个异常。

);若否,则由自动以的函数来处理全局未处理异常。

二、向量化异常

         SHE是一种基于代码框的机制。Windows提供了向量化异常处理机制。程序可注册一个函数,而不需要依赖于语言有关的关键字。每当异常发生或一个未处理异常脱离标准SHE控制时,此函数就会被调用。

三、C++异常与结构化异常的比较

         SHE是OS提供的便利,可在任何语言中使用。而C++异常处理仅在编写C++代码时才可使用。若开发C++程序,就用C++异常。因C++异常是语言的一部分,编译器知道什么是一个C++对象,也就意味着编译器会自动调用生成代码来调用C++对象的析构函数,保证对象的释放。

Visual C++编译器用OS的结构化异常来实现C++异常处理机制。对比如下:

C++

try

catch

throw

SEH

__try

__except

RaiseException

抱歉!评论已关闭.