手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi 异常处理与程序调试(二)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

12.1.3.1 通用部件异常类 

  通用部件异常类常用的有三个:EInvalidOperationEComponentErrorEOutOfResource。其中EInvalidOperationEOutOfResourceControls单元中定义;EComponentErrorClasses单元中定义。

  1.非法操作异常 EInvalidOperation

  EInvalidOperation 引发的原因可能有:

  ● 应用程序试图对一个Parent属性为nil的部件进行一些需要Windows句柄的操作

  ● 试图对一个窗口进行拖放操作

  ● 操作违反了部件属性间内置的相互关系等 

  例如,ScrollBarGauge等部件要求Max属性大于等于Min属性,因而下面的语句: 

  ScrollBar1.Max := ScrollBar1.Min-1;

  将引发一个EInvalidOperation异常。 

  2.部件异常EComponentError

引发该异常的原因可能有:

  ● 在ReGISter过程之外试图登录一个部件(常用于自定义部件开发中)

  ● 应用程序在运行中改变了一个部件的名称并使该部件与另一个部件重名

  ● 一个部件的名称改变为一个Object Pascal非法的标识符

  ● 动态生成一个部件与已存在的另一部件重名 

3.资源耗尽异常EOutOfResource

当应用程序试图创建一个Windows句柄而Windows 却没有多余的句柄分配时引发该异常。 

12.1.3.2 专用部件异常类 

  许多部件都定义了相应的部件异常类。但并不是有关部件的任何错误都会引发相应的异常类。许多情况下它们将引发一个运行时间异常或对象异常。

  下面列出几个典型的部件异常类。

  1.EMenuError

非法的菜单操作,例如试图删除一个不存在的菜单项。这一异常类在Menus库单元中定义。

  2.EInvalidGridOpertion

  非法的网格操作,比如试图引用一个不存在的网格单元。这一异常类在Grids库单元中定义。

  3.EDDEError

  DDE异常。比如应用程序找不到特定的服务器或会话,或者一个联接意外中止。这一异常类在DDEMan库单元中定义。

  4.EDatabaseErrorEReportError

  数据库异常(EDatabaseError)和报表异常(EReportError) 在进行数据库和报表操作出现错误时引发。有关数据库的问题请读者参阅本书第二编。 

12.1.4 小结 

  在这一节中重点介绍了Delphi提供的异常类体系。我们力求给读者一个清晰、全面的印象,使读者能在自己的程序开发中实际使用它们。为便于理解我们也提供了一些简单的说明性示例。虽然在具体的使用中读者还可能会碰到许多问题,但意识到应该用异常类来增强程序的健壮性却是程序设计水平走上新台阶的标志。 

12.2 异常保护 

  确保回收分配的资源是程序健壮性的一个关键。但缺省情况下异常发生时程序会在出错点自动退出当前模块,因此需要一种特殊的机制来确保即使在异常发生的情况下释放资源的语句仍能被执行。而Delphi的异常处理正提供了这种机制。 

12.2.1 需要保护的资源 

  一般说来需要保护的资源包括:

  ● 文件

  ● 内存

  ● Windows资源

  ● 对象 

  比如下面一段程序就会造成1K内存资源的丢失。 

var

APointer : Pointer ;

AInt , ADiv: Integer ;

begin

ADiv := 0;

GetMem ( APointer , 1024 );

AInt := 10 div ADiv ;

FreeMem ( Apointer , 1024 );

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!