Begrensde QuickJS-runtime

HPDFQuickJS en HPDFQuickJSStatic stellen dezelfde door de applicatie beheerde JavaScript-evaluatie-API bloot op Win32 en Win64

Kies een implementatiemodus

De DLL-binding accepteert een expliciet pad, de HOTPDF_QUICKJS_DLL-omgevingswaarde of de platformmap die onder een executable-voorouder wordt gevonden

Standaard-bouwen plaatsen de bridge op Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll of Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

Op Linux x86-64 laadt HPDFQuickJS de native libhpdfquickjs.so-bridge gebouwd door tools/Build-HotPDFQuickJSLinux.sh; het expliciete pad en de omgevingsvariabele volgen dezelfde eigendoms- en ABI-regels

Linux default-detectie controleert de executable-map en Lib/thirdparty/QuickJS/bin/Linux64; native statische OMF-deployment blijft specifiek voor Windows

Een script evalueren

uses
  HPDFQuickJS;

var
  Engine: THPDFQuickJS;
  EvalResult: THPDFQuickJSResult;
begin
  Engine := THPDFQuickJS.Create;
  try
    if not Engine.Available then
      raise Exception.Create(Engine.LoadError);
    EvalResult := Engine.Eval('JSON.stringify([1, 2, 3].map(x => x * 2))');
    if not EvalResult.Success then
      raise Exception.Create(EvalResult.Error);
  finally
    Engine.Free;
  end;
end;

Eval converteert de uiteindelijke JavaScript-waarde naar UTF-8-tekst en behoudt Unicode bij het retourneren van een Delphi-string

EvalInt en EvalFloat voegen strikte numerieke conversie toe zonder enginewaarden over de ABI-grens bloot te stellen

Uitvoeringslimieten

Limits := THPDFQuickJSLimits.CreateDefault;
Limits.MemoryBytes := 32 * 1024 * 1024;
Limits.StackBytes := 64 * 1024;
Limits.MaxScriptBytes := 256 * 1024;
Limits.TimeoutMs := 250;
Limits.MaxInterruptChecks := 250000;
Engine := THPDFQuickJS.Create(Limits);

De standaarden staan 64 MiB enginegeheugen, een 64 KiB-stack, een UTF-8-script van 1 MiB, één seconde wandklok-tijd en één miljoen interrupt-checks toe

De Win32-statische runtime beperkt een nul- of groter gevraagd stackbudget tot 48 KiB om binnen de compiler-veilige recursiegrens te blijven; DLL- en Win64-modi honoreren de gevraagde waarde rechtstreeks

Geheugen- en stacklimieten gelden voor de hele runtime, terwijl script-, tijd- en interruptlimieten per evaluatie worden toegepast

Status en herstel

Een geweigerde of onderbroken evaluatie wist zijn lopende uitzondering en buffers, zodat dezelfde engine-instantie een later geldig script kan uitvoeren

Eén engine-instantie is niet reentrant; gebruik één instantie per gelijktijdige worker

XFA-formulierscripting

De XFA-platstampen-engine hergebruikt deze runtime alleen wanneer THotPDF.XFAJavaScriptEnabled expliciet is ingesteld; het levert een beperkte data-facade, native getypeerde arrays, gevalideerde instance-verzoeken en geen bestand-, proces-, browser- of netwerkobjecten

TXFAFormScriptOptions.JavaScriptEvaluator kan de statische runtime aanpassen zonder statische QuickJS-objecten in elke HotPDF-applicatie te forceren

Zie Begrensde XFA FormCalc en JavaScript

Reproduceerbare runtime-build

powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1

Het bouwscript produceert zowel de statische objectensets als beide bridge-DLL's uit de gebundelde bron, waarna de runtime-matrix statische en DLL-probes voor Win32 en Win64 compileert en oefent