exceptdemo2.lpr 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. program exceptdemo2;
  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 : EWasmNativeException do
  30. Writeln('Exception ',E.NativeClass,' raised: ',e.NativeMessage);
  31. end;
  32. try
  33. TTestProc(aDescriptor.exported['DoTest2'])();
  34. except
  35. on e : EWasmNativeException do
  36. Writeln('Exception ',E.NativeClass,' raised: ',e.NativeMessage);
  37. end;
  38. end;
  39. procedure TMyApplication.DoRun;
  40. begin
  41. // Let the wasi hosting environment know we'll handle exceptions.
  42. StartWebAssembly('demolib.wasm',True,Nil,@DoAfter);
  43. end;
  44. var
  45. Application : TMyApplication;
  46. begin
  47. Application:=TMyApplication.Create(nil);
  48. Application.Initialize;
  49. Application.Run;
  50. end.