Перехват исключений в библиотеке.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение buls » 17.04.2006 05:33:44

Здравствуйте!
компилирую в FPC следующую DLL:
Код: Выделить всё
library mydll;
uses
 SysUtils, Windows;

procedure Test();
var
i,i2,i3: integer;
begin
try
i:=100;
i2:=0;
i3:=i div i2; // Попытка деления на ноль
except
 on EDivByZero do
 MessageBoxA(0,'Попытка деления на ноль перехвачена в библиотеке','',MB_OK);
end;
end;

exports
Test name 'Test';

begin
end.  


В экспортируемой из этой библиотеки функции Test происходит деление на ноль.
Далее в FPC компилирую програмульку, вызывающую функцию Test из этой библиотеки:
Код: Выделить всё
program project;
uses
SysUtils, Windows;

procedure Test; external 'mydll.dll';

begin
try
Test;
except
 on EDivByZero do
 MessageBoxA(0,'Попытка деления на ноль перехвачена в программе','',MB_OK);
end;
end.  


Проблема состоит в том, что блок try..except в библиотеке не обрабатывает это исключение, обработка исключения происходит только в программе, а мне нужно, чтобы обработка происходила именно в библиотеке и не выходила наружу.
Подскажите, пожалуйста, как можно исправить данную ситуацию?
buls
незнакомец
 
Сообщения: 7
Зарегистрирован: 07.04.2006 08:01:44

Сообщение bw » 17.04.2006 18:26:53

Есть особенность динамической и статической "сборки" приложения/библиотеки в Delphi. Что-то, наверное и в fp искать нужно. Я говорю о динамическом подлключении .bpl в котором и находится SysUtils, EDivByZero и т.д. Хотя мне чувствуется что проблема кроется немного в другом. Попробуй библиотеку и программу собрать в Delphi с исполнением с "runtime пакетакми" (как-то так, что бы они динамически подключали SysUtils, кажется rtl*.bpl).

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение buls » 18.04.2006 04:11:29

Попробовал собрать то же самое в Delphi, компилировал и с включенными runtime пакетами и без них, все исключения перехватываются в библиотеке без проблем. В Delphi придраться не к чему, видать проблема в FPC, пробовал 1.0.6, 2.0.2 и 2.1.1 версиями компилятора собирать библиотеку, всё равно исключения не обрабатываются.
buls
незнакомец
 
Сообщения: 7
Зарегистрирован: 07.04.2006 08:01:44

Сообщение volvo877 » 19.04.2006 15:02:21

buls,
только что попробовал собрать в FPC 2.0.0 - все нормально ловится.
volvo877
незнакомец
 
Сообщения: 8
Зарегистрирован: 04.09.2005 14:34:53

Сообщение Janus » 20.04.2006 12:09:39

А вот в 2.0.2 перехват осуществляется в программе. Странно.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение buls » 20.04.2006 12:20:06

Volvo877, попробовал в 2.0.0, всё равно ловит только в программе. А с какими параметрами компилировали? Может просто я что-то не так делаю.
buls
незнакомец
 
Сообщения: 7
Зарегистрирован: 07.04.2006 08:01:44

Сообщение buls » 20.04.2006 14:48:59

Всё, нашёл ответ на свой вопрос. Это непофиксенный баг компилятора <a href='http://www.freepascal.org/bugs/showrec.php3?ID=2573' target='_blank'>http://www.freepascal.org/bugs/showrec.php3?ID=2573</a>. Надеюсь в следующих версиях исправят.
buls
незнакомец
 
Сообщения: 7
Зарегистрирован: 07.04.2006 08:01:44


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 87

Рейтинг@Mail.ru