You can use
AcquireExceptionObject returns a pointer to the current exception object and prevents the exception object from being deallocated when the current exception handler exits.
Then you can send the pointer to another thread and if you raise it there it will be freed for you, otherwise you must call
ReleaseExceptionObject()to free it.
If you have a very old (version <= 5) Delphi or just want to look at how
AcquireExceptionObject [WayBack] looks like just look at a similar implementation there [WayBack]. Note that instead of the
ReleaseExceptionObject [WayBack] call, AsyncCalls re-raises the exception [WayBack].