32 Урока Borland Delphi



Урок 09 - часть 7


writeln('enter B');

P := nil;

Q := nil;

R := nil;

S := nil;

try

writeln('enter B''s try block');

GetMem(P, 1000);

GetMem(Q, 1000);

GetMem(R, 1000);

GetMem(S, 1000);

C;

writeln('end of B''s try block');

finally

writeln('inside B''s finally block');

if P <> nil then FreeMem(P, 1000);

if Q <> nil then FreeMem(Q, 1000);

if R <> nil then FreeMem(R, 1000);

if S <> nil then FreeMem(S, 1000);

end;

writeln('exit B');

end;

Установив сперва указатели в NIL, далее можно определить, успешно ли прошел вызов GetMem.

Оба типа конструкции try можно использовать в любом месте, допускается вложенность любой глубины. Исключительную ситуацию можно вызывать внутри обработчика ошибки, конструкцию try можно использовать внутри обработчика исключительной ситуации.

  • Вызов исключительной ситуации

  • В процедуре C из примера мы уже могли видеть, как должна поступать программа при обнаружении состояния ошибки - она вызывает исключительную ситуацию:

    raise ESampleError.Create(‘Error!’);

    После ключевого слова raise следует код, аналогичный тому, что используется для создания нового экземпляра класса. Действительно, в момент вызова исключительной ситуации создается экземпляр указанного класса; данный экземпляр существует до момента окончания обработки исключительной ситуации и затем автоматически уничтожается. Вся информация, которую нужно сообщить в обработчик ошибки передается в объект через его конструктор в момент создания.

    Почти все существующие классы исключительных ситуаций являются наследниками базового класса Exception и не содержат новых свойств или методов. Класс Exception имеет несколько конструкторов, какой из них конкретно использовать - зависит от задачи. Описание класса Exception можно найти в on-line Help.
     
     

  • Доступ к экземпляру объекта exception

  • До сих пор мы рассматривали механизмы защиты кода и ресурсов, логику работы программы в исключительной ситуации. Теперь нужно немного разобраться с тем, как же обрабатывать возникшую ошибку. А точнее, как получить дополнительную информацию о коде ошибки, текст сообщения и т.п.




    Содержание  Назад  Вперед