通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 程序设计 >> C#语言 >> 基础教程 >> 文章正文

Win32下的结构异常 B
责任编辑:admin   更新日期:2005-8-6
8.2.4 在C++中混用结构异常
在C++程序中混用结构异常时需要了解几项内容。首先,尽管C++Builder用Win32结构异常实现C++异常,C++异常对__except块来说仍时透明的。一个try块后可跟随一个except块或至少一个catch块。若试图混用二者会产生一个编译错误。需要处理两种类型异常的代码应该简单地在两个try块内嵌套:


函数throw()规范不会影响程序关于Win32异常的行为。另外,未处理的异常最后由操作系统处理(若调试器不首先处理它),不像C++程序那样调用terminate()。任何使用-xd编译器选项(缺省打开)编译的程序块将调用所有“自动”存储的对象的析构函数。栈打开操作从异常发生点到异常被捕捉点间发生。
C++程序中基于C的异常示例



8.2.5 定义异常
同一个程序内引发并处理Win32异常通常不太合适:C++异常能更好地做相同的工作,可移植性更好,并且使用更简单的语法。Win32异常确实有优点,然而,可处理它们的组件可能无法用同样的C++编译器编译。
第一步是定义异常。异常是下列格式的一个32位的整数(从位0开始),见表8-3:


除了定义异常的代码,还要决定异常是否包括附加的信息(可从异常记录中访问过滤器/处理程序)。在异常代码中加入附加的参数没有常规的方法。参见Win32帮助(在C++Builder联机帮助中)可获得更多信息。

8.2.6 引发异常
Win32异常由调用RaiseException()引发,声明如下:


其中:
点击放大

8.2.7 终止块
结构异常处理模型支持“终止块”,在被保护块正常退出后执行或经由异常。C++Builder编译器在C中以下列语法支持它:


终止块可由C++扩展支持,可在__finally块中处理清理程序:


下例说明终止块:



C++代码也能通过创建局部对象处理终止块,这些对象在范围退出时调用析构函数。由于C++Builder结构异常支持析构清理,这使得程序可以不用考虑异常的类型。
注意 有一个需要担心的情况,当异常被引发并没有处理程序时。对于C++异常,C++Builder编译器为局部对象调用析构函数(不要求由语言定义),而未处理的Win32异常,析构清理不发生。
 
  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程