12.1.1.7 硬件異常
硬件異常發(fā)生的情況有兩種:或者是處理器檢測到一個它不能處理的錯誤,或者是程序產(chǎn)生一個中斷試圖中止程序的執(zhí)行。硬件異常不能編譯進動態(tài)鏈接庫(DLLs)中,而只能在標準的應(yīng)用中使用。
硬件異常都是EProcessor異常類的子類。但運行時間并不會引發(fā)一個EProcessor 異常。
表12.5 硬件異常類及其產(chǎn)生原因
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發(fā)原因
─────────────────────────────────
Efault 基本異常類。是其它異常類的父類
EGPFault 一般保護錯。通常由一個未 初始化的指針或?qū)ο笠?/P>
EStackFault 非法訪問處理器的棧段
EPageFault Windows內(nèi)存管理器不能正確使用交換文件
EInvalidOpCode 處理器碰到一個未定義的指令。這通常意味著處理器
試圖去操作非法數(shù)據(jù)或未初始化的內(nèi)存
EBreakPoint 應(yīng)用程序產(chǎn)生一個斷點中斷
ESingleStep 應(yīng)用程序產(chǎn)生一個單步中斷
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EFault、EGPFault 往往意味著致命的錯誤。而EBreakPoint、ESingleStep被Delphi IDE的內(nèi)置調(diào)試器處理。事實上前邊的五種硬件異常的響應(yīng)和處理對開發(fā)者來說都是十分棘手的問題。
12.1.2 對象異常類
所謂對象異常是指非部件的對象引發(fā)的異常。Delphi定義的對象異常包括流異常、打印異常、圖形異常、字符串鏈表異常等。
12.1.2.1 流異常類
流異常類包括EStreamError、EFCreateError、 EFOpenError、EFilerError、EReadError、EWriteError、EClassNotFound。它們的結(jié)構(gòu)關(guān)系如下:
EStreamError
|---------- EFCreateError
|---------- EFOpenError
|---------- EFilerError
|--------- EReadError
|--------- EWriteError
|--------- EClassNotFound
圖12.1 流異常結(jié)構(gòu)圖
流異常在Classes庫單元中定義。
流異常引發(fā)的原因如表12.6。
表12.6 流異常類及其產(chǎn)生原因
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發(fā)原因
─────────────────────────────────
EStreamError 利用LoadFromStream方法讀一個流發(fā)生錯誤
EFCreateError 創(chuàng)建文件時發(fā)生錯誤
EFOpenError 打開文件時發(fā)生錯誤
EFilerError 試圖再次登錄一個存在的對象
EReadError ReadBuffer方法不能讀取特定數(shù)目的字節(jié)
EWriteError WriteBuffer方法不能寫特定數(shù)目的字節(jié)
EClassNotFound 窗口上的部件被從窗口的類型定義中刪除
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12.1.2.2 打印異常類
打印異常類EPrinter當(dāng)打印發(fā)生錯誤時引發(fā)。它在printers庫單元中定義。例如你的應(yīng)用程序試圖向一個不存在的打印機打印或由于某種原因打印工作無法送到打印機時,就會產(chǎn)生一個打印異常。
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |