Cross-Platform C Library Integration

Prezentare generală

HotPDF folosește HPDFCLibs.pas ca punte spre Pascal între Delphi și fișierele C obiect statically linked folosite de HPDFZLib.pas, HPDFJpeg.pas și HPDFTiff.pas. Unitatea expune simbolurile de runtime pe care acele biblioteci le așteaptă, păstrând în același timp un singur strat coerent de declarații Pascal atât pentru buildurile Win32, cât și pentru cele Win64

Funcționalități cheie

  • Punte de runtime partajată pentru zlib-ng în mod compatibil zlib, dispatch SIMD pe runtime pe 64 de biți pentru zlib-ng, libjpeg-turbo 3.1.90 cu obiecte NASM SIMD și libtiff 4.7.1
  • Acoperire pentru helper-ele de memorie, stdio, șiruri/caractere și anumite helper-e de matematică/runtime
  • Bridging pentru malloc, free, realloc și calloc aliniate la 32 de octeți pentru buffer-e native prietenoase cu SIMD
  • Compatibilitate Win32 cu obiecte OMF zlib-ng construite cu bcc32c și obiecte OMF JPEG/TIFF construite cu bcc32 din Lib\thirdparty\Win32
  • Compatibilitate Win64 cu fișiere obj COFF64 din Lib\thirdparty\Win64 și obiecte COFF zlib-ng din Lib\thirdparty\Win64x
  • Tipuri helper de dimensiune pointer și stub-uri Pascal pentru simboluri pe care linkerul Delphi nu le poate importa direct

Backend JPEG de înaltă performanță

Fluxurile standard JPEG sunt susținute de libjpeg-turbo 3.1.90 prin API-ul clasic compatibil libjpeg expus de HPDFJpeg.pas. Buildurile de obiecte Win32, Win64 și Win64x includ obiectele relevante de accelerare NASM SIMD, iar același set de obiecte livrat împreună este disponibil și stratului de integrare TIFF pentru tratarea TIFF-urilor comprimate JPEG

Note despre puntea zlib-ng

Fluxurile de imagine Flate pe Win64 folosesc o punte C mică în jurul comprimării one-shot zlib-ng. Puntea păstrează tipurile native de lungime zlib-ng în C, menținând în același timp lungimile de buffer de 32 de biți expuse din Pascal și comportamentul de compresie maximă al HotPDF

Buildurile de obiecte zlib-ng Win64x și MSVC Win64 de diagnostic includ implementări cu dispatch pe runtime pentru SSE2, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ și AVX2, cu fallback-uri generice. Win32 păstrează obiectele OMF zlib-ng generice pentru compatibilitate cu bcc32c, iar calea Win32 JPEG/TIFF rămâne pe obiectele OMF clasice bcc32

Grupuri de funcții suportate

  • Gestionarea memoriei: malloc, free, realloc, calloc cu alocare aliniată la 32 de octeți
  • Operații pe fișiere și fluxuri: fopen, fclose, fputc, fread, fwrite, fflush, ferror
  • Funcții pentru șiruri și caractere: strcpy, sprintf, memcpy, memmove, memset, tolower, toupper, towlower, towupper, getenv, atoi
  • Helper-e runtime: ftol, setjmp, log, snprintf, memcmp

Suport pentru arhitecturi

  • Win32: wrapper-e Pascal și helper-e bazate pe WinAPI care corespund obiectelor OMF bcc32c și bcc32 legate de fiecare versiune Delphi Win32 suportată
  • Win64: importuri din msvcrt.dll plus stub-uri helper mici cerute de obiectele COFF64 generate de MSVC
  • Tipuri comune: PtrInt și PtrUInt păstrează aliniate declarațiile de dimensiune pointer între ambele ținte

Vezi și