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

第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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值