{ %TARGET=win32,win64,wince,linux,android } {$ifdef fpc} {$mode objfpc} {$endif} uses SysUtils; type TTest = class public procedure SomeError; safecall; function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override; end; var ExceptObj: TObject; Handled: Boolean; procedure TTest.SomeError; safecall; begin ExceptObj := Exception.Create('SomeException'); raise ExceptObj; end; function TTest.SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; begin if ExceptAddr = nil then halt(2); if ExceptObject <> ExceptObj then halt(3); Handled := True; Result := 0; end; begin Handled := False; TTest.Create.SomeError; if not Handled then halt(1); end.