Avgränsad QuickJS-körtid
HPDFQuickJS och HPDFQuickJSStatic exponerar samma applikationskontrollerade JavaScript-utvärderings-API på Win32 och Win64
Välj ett distributionsläge
HPDFQuickJSladdar den ABI-neutralaquickjs.dll-bryggan och håller QuickJS-värden inne i C-kodHPDFQuickJSStaticlänkar de plattformsspecifika OMF-objekten in i applikationen och kräver ingen runtime-DLL- Inkludera inte båda enheterna i ett program eftersom de publicerar samma publika typnamn
DLL-bindningen accepterar en explicit sökväg, miljövärdet HOTPDF_QUICKJS_DLL eller plattformskatalogen som hittas nedanför en körbar förälder
Standardversioner placerar bryggan på Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll eller Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll
På Linux x86-64 läser HPDFQuickJS in den nativa libhpdfquickjs.so-bryggan byggd av tools/Build-HotPDFQuickJSLinux.sh; explicit sökväg och miljövariabeln följer samma ägarskaps- och ABI-regler
Linux-standardupptäckt kontrollerar exekverbarhetens katalog och Lib/thirdparty/QuickJS/bin/Linux64; nativ statisk OMF-distribution förblir Windows-specifik
Utvärdera ett skript
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 konverterar det slutliga JavaScript-värdet till UTF-8-text och bevarar Unicode när en Delphi-sträng returneras
EvalInt och EvalFloat lägger till strikt numerisk konvertering utan att exponera motorvärden över ABI-gränsen
Exekveringsbegränsningar
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ärdena tillåter 64 MiB motorminne, en 64 KiB-stack, en 1 MiB UTF-8-uppsättning, en sekund väggtid och en miljon avbrottskontroller
Den statiska Win32-körtidens tak begränsar en noll- eller större begärd stackbudget till 48 KiB för att hålla sig inom den kompilatorsäkra rekursionsgränsen; DLL- och Win64-lägena respekterar det begärda värdet direkt
Minnes- och stackgränserna gäller hela körtiden medan skript-, tids- och avbrottsgränserna tillämpas på varje utvärdering
Status och återställning
qjsSuccessrapporterar ett konverterat resultatqjsScriptErrorrapporterar syntaxfel, kastade värden och konverteringsfelqjsTimeLimitochqjsInterruptLimitskiljer de två exekveringsbudgetarna åtqjsBusy,qjsInvalidArgument,qjsResourceErrorochqjsUnavailablebevarar infrastrukturfel
En avvisad eller avbruten utvärdering rensar sitt väntande undantag och sina buffertar, så samma motorinstans kan köra ett senare giltigt skript
En motorinstans är inte reentrant; använd en instans per samtidig arbetare
XFA-formulärskript
XFA-utjämningsmotorn återanvänder denna körtid endast när THotPDF.XFAJavaScriptEnabled uttryckligen är inställd; den tillhandahåller en begränsad datafasad, inbyggda typade arrayer, validerade instansförfrågningar och inga fil-, process-, webbläsar- eller nätverksobjekt
TXFAFormScriptOptions.JavaScriptEvaluator kan anpassa den statiska körtiden utan att tvinga in statiska QuickJS-objekt i varje HotPDF-applikation
Se Avgränsad XFA FormCalc och JavaScript
Reproducerbar runtime-bygge
powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1
Byggskriptet producerar båda statiska objektuppsättningarna och båda brygg-DLL-filerna från den medföljande källkoden, och sedan kompilerar och övar runtime-matrisen statiska och DLL-prober för Win32 och Win64