program exceptdemo2; {$mode objfpc} uses BrowserConsole, BrowserApp, WasiEnv,WASIHostApp, JS, Classes, SysUtils, Web, WebAssembly; type { TMyApplication } TMyApplication = class(TWASIHostApplication) private procedure DoAfter(Sender: TObject; aDescriptor: TWebAssemblyStartDescriptor); procedure ShowInfo(aInfo: TLastExceptionInfo); protected procedure DoRun; override; public end; procedure TMyApplication.ShowInfo(aInfo : TLastExceptionInfo); begin with aInfo do Writeln('Got exception during DoTest: ',ClassName,': "',Message,'", more: ',More) end; procedure TMyApplication.DoAfter(Sender: TObject; aDescriptor: TWebAssemblyStartDescriptor); type TTestProc = procedure; var lInfo : TLastExceptionInfo; begin try TTestProc(aDescriptor.exported['DoTest'])(); except on e : EWasmNativeException do Writeln('Exception ',E.NativeClass,' raised: ',e.NativeMessage); end; try TTestProc(aDescriptor.exported['DoTest2'])(); except on e : EWasmNativeException do Writeln('Exception ',E.NativeClass,' raised: ',e.NativeMessage); end; end; procedure TMyApplication.DoRun; begin // Let the wasi hosting environment know we'll handle exceptions. StartWebAssembly('demolib.wasm',True,Nil,@DoAfter); end; var Application : TMyApplication; begin Application:=TMyApplication.Create(nil); Application.Initialize; Application.Run; end.