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#.
Then it will probably be caught as some external exception or such...
don't know, never tried it.
*“System.Runtime.InteropServices.SEHException (0x80004005): External
component has thrown an exception.”*
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);
"raise" internally uses . The only difference would be that you'd have
a bit more control of exception code and such if you want to ensure
that it's caught nicely by the C/C++/C# code.
Ok, then if raise TObject.Create; calls RaiseException then I think that
I will use raise TObject.Create;
Thanks
L.*
*
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal