鱼C论坛

 找回密码
 立即注册
查看: 4762|回复: 2

[技术交流] Delphi常用异常类及相应的引发条件

[复制链接]
发表于 2013-7-18 23:31:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  
异常类
  
引发条件
EAbort
程序遇到错误但不弹出对话框
EAccessViolation
无效内存访问错误
EAssertionFailed
执行Assert过程返回值是False
EControlC
在控制台中,按【Ctrl】+【C】组合键遇到错误
EConvertError
在字符串或其他对象集转换时遇到错误
EDivByZero
整数除数是0
EinOutError
输入/输出错误
EIntOverflow
整数运算时,结果超过变量定义范围
EMathError
浮点运算出现错误
EOutOfMemory
超出内存错误
EOverflow
浮点运算返回结果超出变量定义范围
ErangeError
整数数值超出变量定义范围,例如数组下标越界
EStackOverflow
堆栈溢出错误
EWin32ErrorWindows
错误
EzeroDivide
浮点运算除数是0
EdatabaseError
数据库错误,在数据库中定义
EupdateError
数据集提供者错误,在数据库中定义
EADOError
ADO数据库错误,在adodb库中定义
EDBEngineError
出现BDE错误,在dbtables库中定义
EnoResultSet
没有成功打开一个数据集查询
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)在进行数据库和报表操作出现错误时引发。
                               
                               
                尾部

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-6 11:21:49 | 显示全部楼层
鱼C还真是什么都有啊,查询方便了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表