C与C++中的异常处理17[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 taodm 的 blog

    转换函数接受一个seh异常(通过给定的异常codeinfo来定义的)。然后抛出一个c++异常,以此将传入的seh异常映射为向外传的c++异常。这个c++异常将出现在原来的seh异常发生点上并向外传播。

    这个机制非常象std::set_terminate()std::set_unexpected()。要安装转换函数,要调用visual c++库函数_set_se_translator()。这个函数申明在头文件eh.h中:

typedef void (*_se_translator_function)(unsigned, exception_pointers *);

 

_se_translator_function _set_se_translator(_se_translator_function);

    它接受一个指向新转换函数的指针,返回上次安装的指针。一旦安装了一个转换函数,前一次的就丢失了;任何时候只有一个转换函数有效。(在多线程程序中,每个线程有一个独立的转换函数。)

    如果还没安装过转换函数,第一次调用_set_se_translator()返回值可能是(也可能不是)null。也就是说,不能不分青红皂白就通过其返回的指针调用函数。很有趣的,如果返回值是null,而你又通过此null调用函数,将产生一个seh异常,并且进入你刚刚安装的转换函数。

    一个简单的例子:

#include <iostream>

using namespace std;

 

int main()

   {

   try

      {

      *(int *) 0 = 0; // generate structured exception

      }

   catch (unsigned exception)

本文关键:异常
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top