|
发表于 2013-7-19 00:13:12
|
显示全部楼层
表示支持,融入分享.
折叠 运行库异常 (RTL Exception )
运行库异常可以分为 7 类. 都定义在 SysUtils 库单元中.
折叠 1. I/O 异常 EInOutError
在程序运行时,试图对文件或外设进行操作失败后产生的.
它从Exception 派生后增加了一个公有数据成员 ErrorCode .用于保存所发生错误的代码.
当设置编译指示{$I-} 时,不长生 I/O 异常类而是把错误代码返回到预定义变量IORsult中.
尾部
折叠 2. 堆异常
堆异常是在动态内存分配中产生的,包括俩个类 EOutOfMemory 和 EInvalidPointer.
EOutOfMemory 没有足够的空间用于满足所要求的内存分配.
EInvalidPointer 非法指针.一般是由于程序试图去释放一个已释放的指针而引起的.
尾部
折叠 3. 整数异常
整数异常都是从一个EIntError 类派生的.但程序运行中引发的总是它的子类.
EDivByZero,ERangeError,EIntOverFlow.
异常引发条件:
EDivByZero 试图被零除 .
ERangeError 整数表达式越界 .
EIntOverFlow 整数操作溢出 // Integer ,Word ,LongInt
ERangeError 当一个整数表达式的值超过为一个特定整数类型分配的范围时引发.
// 数值溢出, 枚举越界,数组小标越界.
//ERangError 异常只有当范围检查打开时才会引发.这可以在代码中包含{$R+}编译指示.
尾部
折叠 4. 浮点异常
浮点异常是在进行实数 操作时产生的, 它们都从 EMathError 类派生,程序运行中引发的总是它的子类 EInvalidOp ,EZeroDivide,EOverFlow,EunderFlow.
EInvalidOp 处理器碰到一个未定义的指令,通常是没有协处理器的机器遇到一个协处理器指令.386 以下机器上,会遇到这个错误.在单元的接口部分设置全局编译指针{$N-},选择利用运行库进行浮点运算,问题可以解决.
EZeroDivide 试图被零除
EOverFlow 浮点上溢
EUnderFlow 浮点下溢
Real ,Single ,Double , Extended, 越界引发同样的溢出异常.
尾部 浮点异常
折叠 5. 类型匹配异常
类型匹配异常 EInvalidCast
当试图 As 操作符把一个对象与另一类对象匹配失败后引发 .
尾部 类型匹配异常
折叠 6. 类型转换异常
EConvertError 当试图转换函数把数据从一种类型转换为另一种类型时发生.
特别是当把一个字符串转换为数值时引发.
例如: 都会引发 EConverError 异常.
var
r1: Real ;
i1:Integer ;
begin
r1:=StrToFloat('$ 14.48');
i1:=StrtoInt('1,402');
end ;
尾部
折叠 7. 硬件异常
硬件异常 都是 EProcessor 异常类的子类.但运行时并不会引发一个 EProcessor 异常.
硬件异常发生的情况有俩种:
1. 处理器检测到一个它不能处理的错误 .
2. 程序产生一个中断,试图终止程序的执行.
注意: 硬件异常不能编译进动态链接库(DLLS)中,而只能在标准的应用中使用.
硬件异常类及其产生原因
异常类 引发条件
EFault 基本异常类,是其他异常的父类.
EGPFault 一般保护措施,通常由一个未初始化的指针或对象引发.
EStackFault 非法访问处理器的栈段.
EPageFault Windows 内存管理器不能正确使用交换文件.
EInvalidOpCode 处理器碰到一个未定义的指令,
这通常意味着处理器试图去操作非法数据或未初始化的内存.
EBreakPoint 应用程序产生一个断点中断
ESingleStep 应用程序产生一个单步中断
EFault,EGPFault 往往意味着致命的错误,
而 EBreakPoint , ESingleStep 被 Delphi IDE 的内置调试器处理.
尾部
尾部 运行库异常
折叠 对象 异常
所谓对象异常,是指非组件的对象引发的异常.
Delphi 定义的对象异常包括 流异常 ,打印异常 , 图形异常, 字符串链表异常 等.
折叠 流异常
流异常在Classes 库 单元中定义.
异常类引发条件
EStreamError 利用 LoadFromStream 方法读一个流发生错误
EFCreateError 创建文件时发生错误
EFOpenError 打开文件时发生错误
EFileError 试图再次登录一个存在的对象 .
EReadError ReadBuffer 方法不能读取特定数目的字节
EWriteError WriteBuffer 方法不能写特定数目的字节
EClassNotFound 窗口上的组件被 在窗口的类型定义中删除.
尾部
折叠 打印异常类
打印异常类 EPrinter ,当打印错误时引发 .它在 printers 库单元中定义.
例如: 应用程序试图向一个不存在的打印机 打印或由于某种原因打印工作无法送到打印机时,引发异常.
尾部 打印异常类
折叠 图形异常
图形异常定义在 Graphic 库单元中.
EInvalidGraphic 当应用程序试图从一个并不包含 合法的 位图,图标,元文件或用户自定义图形类型的文件中装入图形时 引发.
例如: Image1.Picture.LoadFromFile('Readme.txt'); // 引发异常
EInvalidGraphicOperation 当试图对一个图形进行非法操作时引发.
尾部 图形异常
折叠 字符串链表异常
字符串链表异常 EStringListError , ElistError, 在用户对字符串链表进行非法操作时引发.
由于许多组件(如 ListBox , TMemo , TTabSet,..)都有一个 TStrings 类的重要性,因而字符串链表异常在组件操作编程中非常有用.
EStringListError 异常一般在 字符串链表越界时产生.
ListBox1.Items.Add('Firstitem');
ListBox1.Items.Add('Seconditem');
ListBox1.Items.Add('Thirditem');
则以下操作都会引起EStringListError异常:
ListBox1.Item[3]:='NotExist';
Str:=ListBox1.Item[3];
EListError异常一般在如下两种情况下引发:
(1)当字符串链表的Duplicates属性设置为dupError时,应用程序试图加入一个重复的字符串。
(2)试图往一个排序的字符串链表中插入一个字符串。
尾部 字符串链表异常
尾部 对象 异常
折叠 组件异常
折叠 1. 通用组件异常类
通用组件异常类常用的有三个:EInvalidOperation、EComponentError、EOutOfResource。
其中EInvalidOperation、EOutOfResource在Controls单元中定义;
EComponentError在Classes单元中定义。
(1) 非法操作异常 EInvalidOperation
EInvalidOperation 引发的原因可能有:
a. 应用程序试图对一个Parent 属性为 nil 的组件进行一些需要Windows 句柄的操作.
b. 试图对一个窗口进行拖放操作 .
c. 操作违反了组件属性间内置的相互关系等.
例如,ScrollBar、Gauge等组件要求Max属性大于等于Min属性,因而下面的语句:
ScrollBar1.Max:=ScrollBar1.Min-1;
将引发一个EInvalidOperation异常。
( 2 ) 组件异常EComponentError
引发该异常的原因可能有:
a. 在Register过程之外试图登录一个组件(常用于自定义组件开发中)
b. 应用程序在运行中改变了一个组件的名称并使该组件与另一个组件重名
c. 一个组件的名称改变为一个Object Pascal非法的标识符
d. 动态生成一个组件与已存在的另一组件重名
(3)资源耗尽异常EOutOfResource
当应用程序试图创建一个Windows句柄而Windows却没有多余的句柄分配时引发该异常。
尾部 通用组件异常类
折叠 2. 专用组件异常类
许多组件都定义了相应的组件异常类。但并不是有关组件的任何错误都会引发相应的异常类。许多情况下它们将引发一个运行时异常或对象异常。
(1)EMenuError
非法的菜单操作,例如试图删除一个不存在的菜单项。这一异常类在Menus库单元中定义。
(2)EInvalidGridOpertion
非法的网格操作,比如试图引用一个不存在的网格单元。这一异常类在Grids库单元中定义。
(3)EDDEError
DDE异常。比如应用程序找不到特定的服务器或会话,或者一个连接意外中止。这一异常类在DDEMan库单元中定义。
(4)EDatabaseError,EReportError
数据库异常(EDatabaseError)和报表异常(EReportError)在进行数据库和报表操作出现错误时引发。
尾部
|
|