1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- program exceptdemo;
- {$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 : TJSWebAssemblyException do
- begin
- if Host.GetExceptionInfo(lInfo) then
- ShowInfo(lInfo)
- else
- Raise
- end;
- end;
- try
- TTestProc(aDescriptor.exported['DoTest2'])();
- except
- on e : TJSWebAssemblyException do
- begin
- if Host.GetExceptionInfo(lInfo) then
- ShowInfo(lInfo)
- else
- Raise
- end;
- end;
- end;
- procedure TMyApplication.DoRun;
- begin
- // Let the wasi hosting environment know we'll handle exceptions.
- Host.ConvertNativeExceptions:=False;
- StartWebAssembly('demolib.wasm',True,Nil,@DoAfter);
- end;
- var
- Application : TMyApplication;
- begin
- Application:=TMyApplication.Create(nil);
- Application.Initialize;
- Application.Run;
- end.
|