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.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal