Begrensde QuickJS-runtime
HPDFQuickJS en HPDFQuickJSStatic stellen dezelfde door de applicatie beheerde JavaScript-evaluatie-API bloot op Win32 en Win64
Kies een implementatiemodus
HPDFQuickJSlaadt de ABI-neutralequickjs.dll-bridge en houdt QuickJS-waarden binnen C-codeHPDFQuickJSStatickoppelt de platform-specifieke OMF-objecten in de applicatie en vereist geen runtime-DLL- Neem beide eenheden niet in één programma op, omdat ze dezelfde publieke typenamen publiceren
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
qjsSuccessrapporteert een geconverteerd resultaatqjsScriptErrorrapporteert syntaxfouten, gegooid waarden en conversiefoutenqjsTimeLimitenqjsInterruptLimitonderscheiden de twee uitvoeringsbudgettenqjsBusy,qjsInvalidArgument,qjsResourceErrorenqjsUnavailablebehouden infrastructuurfouten
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