exceptdemo.lpr 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. program exceptdemo;
  2. {$mode objfpc}
  3. uses
  4. BrowserConsole, BrowserApp, WasiEnv,WASIHostApp, JS, Classes, SysUtils, Web, WebAssembly;
  5. type
  6. { TMyApplication }
  7. TMyApplication = class(TWASIHostApplication)
  8. private
  9. procedure DoAfter(Sender: TObject; aDescriptor: TWebAssemblyStartDescriptor);
  10. procedure ShowInfo(aInfo: TLastExceptionInfo);
  11. protected
  12. procedure DoRun; override;
  13. public
  14. end;
  15. procedure TMyApplication.ShowInfo(aInfo : TLastExceptionInfo);
  16. begin
  17. with aInfo do
  18. Writeln('Got exception during DoTest: ',ClassName,': "',Message,'", more: ',More)
  19. end;
  20. procedure TMyApplication.DoAfter(Sender: TObject; aDescriptor: TWebAssemblyStartDescriptor);
  21. type
  22. TTestProc = procedure;
  23. var
  24. lInfo : TLastExceptionInfo;
  25. begin
  26. try
  27. TTestProc(aDescriptor.exported['DoTest'])();
  28. except
  29. on e : TJSWebAssemblyException do
  30. begin
  31. if Host.GetExceptionInfo(lInfo) then
  32. ShowInfo(lInfo)
  33. else
  34. Raise
  35. end;
  36. end;
  37. try
  38. TTestProc(aDescriptor.exported['DoTest2'])();
  39. except
  40. on e : TJSWebAssemblyException do
  41. begin
  42. if Host.GetExceptionInfo(lInfo) then
  43. ShowInfo(lInfo)
  44. else
  45. Raise
  46. end;
  47. end;
  48. end;
  49. procedure TMyApplication.DoRun;
  50. begin
  51. // Let the wasi hosting environment know we'll handle exceptions.
  52. Host.ConvertNativeExceptions:=False;
  53. StartWebAssembly('demolib.wasm',True,Nil,@DoAfter);
  54. end;
  55. var
  56. Application : TMyApplication;
  57. begin
  58. Application:=TMyApplication.Create(nil);
  59. Application.Initialize;
  60. Application.Run;
  61. end.