Иногда в этой dll'ке возникают исключения.
Увы, тут кроется величайший облом. Исключения в dll не ловятся!
В смысле, созданные тобой лично - ловятся, но первый же Access Violation пробьёт все блоки try...except как гнилую фанеру, вылетит в основную программу и уронит её.
Это баг RTL ФриПаскаля, в версии 2.2.0 ещё не удавленный.
Для отладки длл надо создавать программу-"обёртку" внутрь которой она будет компилироваться как обычный модуль, и тестить оттуда.
но вот как вывести информацию по перехваченному исключению с помощью un_lineinfo я понять не могу
Теоретически, после вызова InitLineInfo(nil) эту информацию начинает выдавать стандартный механизм оповещения об исключениях (то диалоговое окошко, которое вылезает при непойманном исключении).
Но можно и так:
- Код: Выделить всё
try
<БАБАХ!>
except
ExplainException();
end;
procedure ExplainException();
var
exe, src: ansistring;
line, column: integer;
begin
GetLineInfo(ExceptAddr, exe, src, line, column);
WriteLn(ExceptObject.ClassName, ' at ', IntToHex(dword(ExceptAddr), 8), ': '
, (ExceptObject as Exception).Message);
if line < 0 then WriteLn('(no debug info: ' + LineInfoError)
else begin
Write('(line ',line);
if column >=0 then Write(', column ', column);
WriteLn(' of ', src);
end;
WriteLn(' in ', exe, ')');
end;
Я, лично, использую куда более навороченные надстройки которые о каждом исключении целую поэму сочиняют.