Главная » Delphi » Исключения и директива SafeCall

0

Функции, отмеченные директивой safecall, используются в модели  COM и при обработке исключений. Она гарантируют, что любое  исключение будет передано вы зывающей функции. Функция  с директивой SafeCall преобразует исключение в воз вращаемое значение HResult. Кроме  того,  применение ключевого слова  SafeCall подразумевает соблюдение соглашения о вызовах StdCall. Следовательно, функция с директивой SafeCall должна быть объявлена так:

function Foo(i: integer): string; Safecall;

На самом деле компилятор воспринимает ее как:

function Foo(i: integer): string; HResult; StdCall;

Затем  компилятор неявно поместит все содержимое этой  функции в блок try..except, который будет перехватывать все исключения. Блок except содержит обращение к функции SafecallExceptionHandler() для  преобразования исклю чения в значение HResult. Это напоминает метод перехвата исключения и передачи кода ошибки, принятый в 16 разрядной Delphi.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии