Воскресно-вечернее торможение

ёёёёё
Дата: 20.10.2019 19:28:49
Что-то я заработался...
procedure ***.KOnApplicationException(Sender: TObject; E: Exception);
...
begin
  ShowMessageFmt('E is %s %s'#10
    + 'E.ClassNameIs(''EFIBInterBaseError'') = %s',
    [iifStr(E is EFIBInterBaseError, '', 'NOT'), EFIBInterBaseError.ClassName,
    iifStr(E.ClassNameIs('EFIBInterBaseError'), 'Yes', 'No')]);


Вывод: см. картинку.

Отчего так? В D7 вроде и "E is EFIBInterBaseError" давало True...
swame2
Дата: 20.10.2019 19:35:58
ёёёёё,
Для начала я бы вывел фактический E.ClassName. А тут кода много , а этого нет
ёёёёё
Дата: 20.10.2019 19:48:38
swame2
ёёёёё,
Для начала я бы вывел фактический E.ClassName. А тут кода много , а этого нет


ОК:
  ShowMessageFmt('EFIBInterBaseError.ClassName=''%s''', [EFIBInterBaseError.ClassName]);
ёёёёё
Дата: 20.10.2019 19:50:42
ёёёёё,

ой, совсем старый и плохой...

Вот:

  ShowMessageFmt('EFIBInterBaseError.ClassName=''%s''', [E.ClassName]);
ёёёёё
Дата: 20.10.2019 19:51:37
Ну, почти правильно. Сойдет.
ёёёёё
Дата: 20.10.2019 20:01:10
?
softwarer
Дата: 20.10.2019 20:58:39
ёёёёё
Отчего так?

Криво собранные DLL-ки либо другая причина, по которой в приложении наблюдается несколько разных EFIBInterBaseError.
Vlad F
Дата: 20.10.2019 21:30:57
Надо просто прямо спросить, - исследуемый объект не из DLL- ки ли пришел? А то, насколько помню, в этом случае всегда были штатные проблемы с as и is.
ёёёёё
Дата: 20.10.2019 21:45:34
softwarer
ёёёёё
Отчего так?

Криво собранные DLL-ки либо другая причина, по которой в приложении наблюдается несколько разных EFIBInterBaseError.


Спасибо, точно! Исключение ловлю, находясь внутри DLL, из методов интерфейса переданного в эту самую DLL объекта, исключения генерируются в "основной программе".
Dimitry Sibiryakov
Дата: 20.10.2019 22:00:17

Ни за что и никогда исключения не должны пересекать границу библиотеки. Если приспичило -
используй safecall чтобы они автоматически ловились на выходе и снова выкидывались на входе.

Posted via ActualForum NNTP Server 1.5