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

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

本文简介:选择自 taodm 的 blog

l         structured_exception的构造函数接收并解析seh异常的信息。

l         what()返回seh异常的异常码。

l         where()返回seh异常发生的地点。注意,where()的返回类型是void const *,虽然c++标准不同意将代码地址转换为void指针。我只是重复了micorsoft的用法,因为visual c++运行库将地址存在了seh异常的exception_record的一个void *成员中了。

    编译并链接这三个文件。运行结果是:

caught c++ exception c0000005 thrown from 0040181d

(其中的代码地址值在你的系统上可能有所不同。)

 

1.3     version 3:模仿c++标准运行库

    my_translator()中,所有的seh异常映射为同样的structured_exception类型。这使得异常容易被捕获,因为它们匹配于我们的唯一的异常处理函数:

catch (structured_exception const &exception)

    虽然捕获了异常,但我们没有办法事先知道异常的类型。唯一能做的是运行期查询,调用这个异常的what()成员:

catch (structured_exception const &exception)

   {

   switch (exception.what())

      {

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

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

go top