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

VCL异常处理
责任编辑:admin   更新日期:2005-8-6
8.3 VCL异常处理
在应用程序中使用VCL组件时,需要理解VCL异常处理机制。因为异常被内置于许多类中,并且当意外事件发生时自动地被发送。若不处理异常,VCL将以缺省方式处理。通常,是显示描述发生错误类型的消息。
编程时遇见显示的一条指示被发送异常类型的消息时,可在VCLReference中查一下异常类。提供的信息经常能够帮助你决定错误在何处发生及其原因。

另外,第9章中介绍了可能引起异常的语言差异。在7.1.4节中提供了一个在对象构造期间发送的异常。

8.3.1 C++和VCL异常处理之间的差别
下面是C++和VCL异常处理之间一些需注意的差别。

由构造函数发送的异常:
· C++析构函数应为被完整构造的基类及成员调用。
· VCL基类析构函数甚至在对象或基类未被完整构造时也调用。

捕捉并发送异常:
· C++异常可以通过引用、指针或值捕捉。VCL异常是从TObject派生出的异常类,仅可通过引用或指针捕捉。试图通过值捕捉TObject异常会导致编译错误。硬件或操作系统异常,例如EAccessViolation,应通过引用捕捉。
· VCL异常通过引用捕捉。
· 不能使用throw重新发送在VCL代码内被捕捉的异常。

8.3.2 处理操作系统异常
C++Builder允许处理操作系统引发的异常。操作系统异常包括越权访问、整数运算错、浮点运算错、栈溢出以及Ctrl+C中断。这些在C++RTL中处理,并且在分发到应用程序前被转换为VCL异常类。

可以编写如下的C++代码:


C++Builder使用的类与Delphi的相同,并仅存在于C++BuilderVCL应用程序中。从TObject派生并要求VCL支持。

下面是C++Builder异常处理的一些特征:
· 不负责释放异常对象。
· 操作系统异常应通过引用捕捉。
· 在操作系统异常被相关的VCLcatch块捕捉,并且catch块结束后不能重新发送操作系统异常。
· 在操作系统异常被相关的操作系统catch块捕捉,并且catch块结束后不能重新发送操作系统异常。

最后两点可以粗略地说:一旦操作系统异常作为C++异常被捕捉,就不能作为操作系统异常或VCL异常被重新发送,除非在catch栈框架之内。

8.3.3 处理VCL异常
C++Builder为处理由VCL引发的软件异常或由C++引发的TObject派生的异常类而拓宽语义。在这种情况下,由于VCL风格类仅能在堆中被分配,从而有下面两个规则。
· VCL风格异常类只能通过指针捕捉,若其为软件异常或者可以通过引用(引用比较好)捕捉。
· VCL风格异常应该用“byvalue”语法发送。

8.3.4 VCL异常类
C++Builder包括一大组内置异常类用以自动处理除数为零错误、文件I/O错误、无效类型转换及许多其他的异常状况。所有的VCL异常类都从一个根对象Exception派生而来。

Exception封装了所有异常类的基本属性和方法,并且为应用程序处理异常提供一致的接口。可以用一个Exception类型的参数把异常传递给catch块。使用下列语法捕捉VCL异常:确定想要捕捉的异常类并提供一个变量以引用它。
下面是如何发送VCL异常的例子:


在前例中throw语句创建异常类的一个实例并且调用其构造函数。所有由Exception派生而来的异常都有可被显示的消息,通过构造函数传递并通过消息属性检索。
表8-4描述可选择的VCL异常类。


从上面的表可看到,内置VCL异常类为你处理了大部分异常并能简化代码。这样可方便你创建自己的异常类处理唯一的状况。可声明一个新异常类为Exception的派生类,Exception有同样多的构造函数(或从SYSUTILS.HPP拷贝一个已有的类构造函数)

8.3.5 可移植性考虑
C++Builder提供一些运行时库(RTL)。大多数从属于C++Builder应用程序,但其中之一(CW32MT.LIB)是不做任何引用到VCL的多线程的RTL。这种RTL可以是工程的一部分但不依赖于VCL的传统应用程序提供支持。这种RTL不支持捕捉操作系统异常,因为那些异常对象从TObject所派生,并要求作为VCL的一部分被连接到应用程序。

为充分获得C++Builder的优点,使用CP32MT.LIB库。它是提供内存管理及VCL处理异常的多线程运行时库。
 
  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程