ActiveX в Delphi

       

Обработка RTL-исключений. Иерархия исключений



RTL (real time library)-исключения определены в модуле Delphi sysutils и являются наследниками базового класса исключений Exception.
Имеется несколько типов исключений-наследников RTL (табл. 1.1).
Таблица 1.1. Типы исключений из RTL


Тип ошибки

Причина

Значение

Ввод/вывод

Ошибка доступа к файлу или устройству ввода/вывода

Большинство исключений ввода/вывода связано с кодом ошибки, возвращаемом Windows при обращении к файлу

Куча

Ошибка использования динамической памяти

Ошибки кучи возникают при недостатке памяти или когда в приложении присутствует указатель на область памяти вне кучи

Целочисленные математические операции

Неправильное действие с выражением целого типа

Ошибки включают в себя: деление на ноль, переполнение, выход за пределы диапазона и др.

Математические операции с плавающей точкой

Неправильное действие с выражением вещественного типа

Ошибки с вещественными числами могут исходить от математического сопроцессора или программного эмулятора. Ошибки включают в себя: неправильные инструкции, деление на ноль, переполнение и др.

Операция аs

Неправильная работа с классами при помощи операции as

Объекты могут работать только с совместимыми объектами

Преобразование

Неправильное преобразование типов

Функции преобразования типов (IntToStr, StrToInt И др.) генерируют эту ошибку в случае невозможности преобразования

Аппаратные

Системные условия

Аппаратные ошибки указывают, что или процессор, или пользователь сгенерировал ошибку: доступа, переполнения стека или другую

Тип Variant

Неправильное использование типа

Variant

Ошибка возникает в выражениях, где не может использоваться тип

Variant


Рассмотрим теперь иерархию классов исключений .более подробно:

Exception

- базовый класс исключений

EAbort

- исключение для намеренного прерывания вычислений

EAbstractError

- попытка вызова абстрактного метода

EAccessViolation

- ошибка доступа к памяти

EArrayError

- ошибка при работе с массивами

EAssertionFailed

- ошибка при проверке истинности

EBitsError

- ошибка доступа к массиву булевых величин TBits

ECacheError

- ошибка построения кэша

EComponentError

- ошибка регистрации или переименования компонента

EControlC

- нажатие пользователем клавиш <Ctrl>+<C> при выполнении консольного приложения

EConvertError

- ошибка преобразования строк (объектов)

EDatabaseError

- ошибка работы с базами данных

EDBClient

- ошибка в наборе данных клиента

EReconcileError

- ошибка обновления данных компонента

TClientDataset

EDBEngineError

- ошибка в BDE

ENoResultSet

- генерируется компонентом TQuery при попытке открыть запрос без select

EUpdateError

- ошибка при обновлении В TProvider

EDateTimeError

- ошибка ввода даты или времени

EDimensionMapError

- ошибка формата данных в кубе решений

EDimlndexError

- ошибочный индекс в задании размерности в кубе решений

EExternalException

- неизвестное исключение

EInOutError

- ошибка ввода/вывода в файл

EIntError

- базовый класс исключений целочисленных математических операций

EDivByZero

- ошибка деления на ноль

ERangeError

- значение или индекс вне допустимого диапазона

EIntOverflow

- переполнение

EIntfCastError

- ошибочное преобразование типов as к интерфейсу

EInvalidGraphic

- нераспознаваемый графический файл

EInvalidGraphicOperation

- ошибка при операциях с графикой

EInvalidGridOperation

- ошибка при работе с сеткой (Grid)

EInvalidOperation

- ошибочная операция с компонентом

EInvalidPointer

- ошибка при операциях с указателем

EListError

- ошибка при работе со списком

ELowCapacityError

- ошибка выделения памяти для куба решений

EMathError

- базовый класс исключений операций с плавающей запятой

EInvalidArgument

- недопустимое значение параметра при обращении к математической функции

EInvalidOp

- неопределенная операция

EOverflow

- ошибка переполнения

EUnderflow

- потеря значащих разрядов

EZeroDi'vide

- ошибка деления на ноль

EMCIDeviceError

- ошибка доступа к устройствам через драйвер MCI (Media Control Interface)

EMenuError

- ошибка при работе с элементами меню

EOleCtrlError

- ошибка при связывании приложения с элементом ActiveX

EOleError

- низкоуровневая ошибка OLE

EOleSysError

- ошибка интерфейса OLE IDispatch

EOleException

- ошибка OLE, связанная со свойством или методом

EOutlineError

- ошибка при работе с Tout line

EOutOfMemory

- ошибка распределения памяти

EOutOfResources

- ошибка создания обработчика Windows

EPackageError

- исключение, генерируемое при загрузке или использовании пакета

EParserError

- ошибка преобразования текста описания формы в двоичный формат

EPrinter

- ошибка печати

EPrivelege

- ошибка выполнения инструкции процессора из-за нехватки привилегий

EPropReadOnly

- ошибка записи с помощью OLE значения свойства, предназначенного только для чтения

EPropWriteOnly

- ошибка чтения с помощью OLE значения свойства, предназначенного только для записи

EPropertyError

- ошибка при задании значения свойства

ERegistryException

- ошибка при работе с реестром Windows

EReportError

- ошибка задания типа сервера (компонент TReport не может соединиться с базой данных)

EResNotFound

- ошибка загрузки файла ресурсов (*.DFM или *.RES) во время создания приложения

EStackOverflow EStreamError

- переполнение стека - базовый класс исключений ошибок потоков

EFCreateError

- ошибка создания файла

EFOpenError

- ошибка открытия файла

EFilerError

- базовый класс исключений файловых потоков

EReadError

- ошибка чтения заданного числа байт

EWriteError

- ошибка записи заданного числа байт

EclassNotFound

- ошибка связи компонента с приложением

Elnvalidlmage

- ошибка чтения файла ресурсов

EmethodNotFound

- не найден метод

EStringListError

- ошибка доступа к окну списка

EThread

- ошибка многопоточного приложения

ETreeViewError

- ошибка индекса при работе с TTreeview

EVariantError

- ошибка при работе с типом данных variant

EWin32Error

- внутренняя ошибка Windows


Итак, класс Exception является базовым классом всех исключений в Delphi. Все вышеописанные классы являются прямыми или косвенными наследниками класса Exception. При создании собственных новых классов исключений необходимо использовать класс Exception как родительский. Только в этом случае Delphi гарантированно распознает и обработает новый класс как исключение. В свою очередь, класс Exception является прямым наследником базового класса TObject, и наследует все его функции. В отличие от
других классов, классы исключений начинаются не с буквы т, а с буквы Е. При создании собственных классов исключений можно называть их по своему усмотрению, не обязательно начиная с буквы Е (но это считается плохим стилем программирования).

Содержание раздела