Afgrænset QuickJS-kørselstid
HPDFQuickJS og HPDFQuickJSStatic tilbyder den samme programstyrede JavaScript-evaluerings-API på Win32 og Win64
Vælg en udrulningstilstand
HPDFQuickJSindlæser den ABI-neutralequickjs.dll-bro og bevarer QuickJS-værdier i C-kodeHPDFQuickJSStatickæder de platformspecifikke OMF-objekter ind i programmet og kræver ingen DLL under kørsel- Medtag ikke begge units i ét program, da de offentliggør de samme offentlige typenavne
DLL-bindingen accepterer en eksplicit sti, miljøværdien HOTPDF_QUICKJS_DLL eller platformsbiblioteket fundet under en eksekverbar overordnet mappe
Standardbygninger placerer broen i Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll eller Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll
På Linux x86-64 indlæser HPDFQuickJS den native libhpdfquickjs.so-bro bygget af tools/Build-HotPDFQuickJSLinux.sh; eksplicit sti og miljøvariabel følger samme ownership- og ABI-regler
Linux default discovery tjekker den eksekverbares mappe og Lib/thirdparty/QuickJS/bin/Linux64; native statisk OMF-deployment forbliver Windows-specifikt
Evaluer et script
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 konverterer den endelige JavaScript-værdi til UTF-8-tekst og bevarer Unicode ved retur af en Delphi-streng
EvalInt og EvalFloat tilføjer streng numerisk konvertering uden at eksponere motorværdier på tværs af ABI-grænsen
Udførelsesgrænser
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);
Standardværdierne tillader 64 MiB motormemory, en 64 KiB stak, et 1 MiB UTF-8-script, ét sekunds vægtid og én million afbrydelsestjek
Win32s statiske kørselsmiljø begrænser et ønsket stakbudget på nul eller derover til 48 KiB for at holde sig inden for compilerens sikre rekursionsgrænse, mens DLL- og Win64-tilstande følger den ønskede værdi direkte
Hukommelses- og stakgrænser gælder hele kørselsmiljøet, mens script-, tids- og afbrydelsesgrænser anvendes på hver evaluering
Status og genopretning
qjsSuccessangiver et konverteret resultatqjsScriptErrorangiver syntaksfejl, kastede værdier og konverteringsfejlqjsTimeLimitogqjsInterruptLimitskelner mellem de to udførelsesbudgetterqjsBusy,qjsInvalidArgument,qjsResourceErrorogqjsUnavailablebevarer infrastrukturfejl
En afvist eller afbrudt evaluering rydder sin ventende undtagelse og buffere, så den samme motorinstans kan udføre et senere gyldigt script
En motorinstans er ikke reentrant, så brug én instans pr. samtidig worker
XFA-formularscripting
XFA-fladningsmotoren genbruger kun dette kørselsmiljø, når THotPDF.XFAJavaScriptEnabled er angivet eksplicit, og den leverer en begrænset datafacade, oprindelige typed arrays, validerede instansanmodninger samt ingen fil-, proces-, browser- eller netværksobjekter
TXFAFormScriptOptions.JavaScriptEvaluator kan tilpasse den statiske kørselsvariant uden at tvinge statiske QuickJS-objekter ind i enhver HotPDF-applikation
Se Afgrænset XFA FormCalc og JavaScript
Reproducerbar bygning af kørselsmiljøet
powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1
Byggescriptet producerer begge statiske objektsæt og begge bro-DLL'er fra den medfølgende kilde, hvorefter kørselsmatrixen kompilerer og afprøver statiske og DLL-prober for Win32 og Win64