[fpc-pascal] Raise exception in libray which will not halt host application
LacaK
lacak at zoznam.sk
Thu Aug 26 12:59:44 CEST 2021
> Am 26.08.2021 um 10:10 schrieb LacaK via fpc-pascal:
>> Thank you for both answers!
>
> Please note that you won't be able to catch such an exception with the
> type from within the application, e.g.:
>
> === code begin ===
>
> try
> SomeLibraryFunction;
> except
> on e: TMyObject do
> Whatever;
> else
> WhateverElse;
> end;
>
> === code end ===
>
> The above code would go to the first branch *inside* your library, but
> it will *always* go to the else-branch outside your library, cause the
> comparison is done on the pointer to the VMT (the class type) which
> will be *different* between library and application (even if you use
> the same unit!). This is one of the main reasons why dynamic packages
> are needed for comfortable use of libraries in Object Pascal, because
> it allows such types to be shared across module boundaries.
>
My situation is even worser :-)
Library DLL is writen in Pascal, but main application is C/C#.
When I call in library RunError() then whole application aborts.
I need throw exception in library which can be catched in application.
I now use in unit which is used by library:
if System.IsLibrary then
raise TObject.Create // raise exception - type of exception is not
important ...
// can I call here also Windows's RaiseException()? ... so it will
be propagated to linking application?
else
System.RunError(w);
L.
More information about the fpc-pascal
mailing list