Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Разбираемся с исключениями Delphi: получение настоящего класса и имени исключения из скрипта

Delphi , Синтаксис , Ошибки и Исключения

Работая с Delphi и скриптами, разработчики могут столкнуться с ситуацией, когда при вызове функции, написанной на Delphi, из скрипта, возникают исключения. В таком случае на стороне скрипта получается обобщенное исключение EDelphi, которое не позволяет определить класс и имя исключения, возникшего на стороне Delphi. В данной статье мы рассмотрим, как можно получить реальный класс или имя класса исключения, которое было сгенерировано в Delphi, на стороне скрипта.

Проблема

Когда из скрипта вызывается функция на Delphi, которая может сгенерировать исключение, на стороне скрипта мы получаем только обобщенное исключение EDelphi. Это скрывает информацию о классе исключения, которое произошло на стороне Delphi. Например, если функция может вызвать исключение EOutOfMemory, на стороне скрипта мы всегда получим EDelphi, без возможности узнать реальный класс исключения.

try
  MyDelphiSideFunction; // Может вызвать EOutOfMemory
except on E: Exception do
  PrintLn(E.ClassName);
end;

Этот код всегда будет выводить "EDelphi", независимо от того, какое исключение произошло на стороне Delphi.

Решение

Непосредственно получить тип класса исключения на стороне скрипта напрямую не получится, так как обработчик исключений DWScript не хранит эту информацию, и тип Delphi не имеет смысла внутри скрипта. Однако, можно получить имя класса исключения, используя свойство EDelphi.ExceptionClass. Вот пример скрипта, демонстрирующего это:

try
  var x := 1/0; // Вызов исключения деления на ноль
except
  on E: EDelphi do
    WriteLn('Ошибка: ' + E.Message + ' (' + E.ExceptionClass + ')');
  on E: Exception do
    WriteLn('Ошибка: ' + E.Message);
else
  WriteLn('Неизвестный тип исключения');
end;

При выполнении этого кода будет выведено сообщение с именем класса исключения, например:

Ошибка: Деление на ноль (EZeroDivide)

Как я нашел ответ

Автор подтвержденного ответа нашел решение, изучив исходный код DWScript. Он обнаружил, что при преобразовании исключения Delphi в исключение скрипта EDelphi, используется метод CreateEDelphiObj, который принимает имя класса и сообщение об ошибке. Далее, анализируя код, автор пришел к выводу, что имя класса сохраняется в свойстве ExceptionClass.

Заключение

Используя свойство ExceptionClass обобщенного исключения EDelphi в скриптах DWScript, разработчики могут получить имя класса исключения, которое произошло на стороне Delphi. Это позволяет более точно диагностировать и обрабатывать ошибки в кросс-платформенных приложениях, использующих сочетание Delphi и скриптов.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема и решение получения информации о реальном классе исключения, возникшего на стороне Delphi, при его вызове из скрипта, и предоставляется способ извлечения имени класса исключения через свойство `ExceptionClass`


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ошибки и Исключения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 03:13:52/0.0058701038360596/0