Integracja wieloplatformowej biblioteki C

Omówienie

HotPDF używa HPDFCLibs.pas jako mostu od strony Pascala między Delphi a statycznie linkowanymi plikami obiektowymi C używanymi przez HPDFZLib.pas, HPDFJpeg.pas i HPDFTiff.pas. Unit udostępnia symbole runtime oczekiwane przez te biblioteki, zachowując jedną spójną warstwę deklaracji Pascal dla buildów Win32 i Win64.

Najważniejsze funkcje

  • Wspólny most runtime dla zlib-ng w trybie zgodnym z zlib, 64-bitowej dyspozycji SIMD runtime zlib-ng, libjpeg-turbo 3.1.90 z obiektami NASM SIMD oraz libtiff 4.7.1
  • Pokrycie pamięci, stdio, funkcji string/character oraz wybranych pomocników math/runtime
  • Most dla malloc, free, realloc i calloc z wyrównaniem 32-bajtowym dla natywnych buforów przyjaznych SIMD
  • Zgodność Win32 z obiektami OMF zlib-ng zbudowanymi przez bcc32c oraz obiektami OMF JPEG/TIFF zbudowanymi przez bcc32 z Lib\thirdparty\Win32
  • Zgodność Win64 z plikami obj COFF64 z Lib\thirdparty\Win64 oraz obiektami COFF zlib-ng z Lib\thirdparty\Win64x
  • Typy pomocnicze o rozmiarze wskaźnika i stuby Pascal dla symboli, których linker Delphi nie może importować bezpośrednio

Wysokowydajny backend JPEG

Standardowe przepływy JPEG są obsługiwane przez libjpeg-turbo 3.1.90 za pośrednictwem klasycznego API zgodnego z libjpeg, udostępnianego przez HPDFJpeg.pas. Buildy obiektów Win32, Win64 i Win64x obejmują odpowiednie obiekty akceleracji NASM SIMD, a ten sam dołączony zestaw obiektów jest dostępny także dla warstwy integracji TIFF do obsługi TIFF skompresowanych JPEG.

Uwagi o moście zlib-ng

Strumienie obrazów Flate w Win64 używają małego mostu C wokół jednorazowej kompresji zlib-ng. Most utrzymuje natywne typy długości zlib-ng po stronie C, zachowując 32-bitowe długości buforów widoczne od strony Pascala HotPDF i zachowanie maksymalnej kompresji.

Buildy obiektów zlib-ng Win64x i diagnostyczne MSVC Win64 obejmują implementacje SSE2, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ i AVX2 wybierane w runtime z fallbackami ogólnymi. Win32 zachowuje ogólne obiekty OMF zlib-ng dla zgodności bcc32c, a ścieżka JPEG/TIFF Win32 pozostaje na klasycznych obiektach OMF bcc32.

Obsługiwane grupy funkcji

  • Zarządzanie pamięcią: malloc, free, realloc, calloc z alokacją wyrównaną do 32 bajtów
  • Operacje na plikach i strumieniach: fopen, fclose, fputc, fread, fwrite, fflush, ferror
  • Funkcje string i character: strcpy, sprintf, memcpy, memmove, memset, tolower, toupper, towlower, towupper, getenv, atoi
  • Pomocniki runtime: ftol, setjmp, log, snprintf, memcmp

Obsługa architektur

  • Win32: wrappery Pascal i pomocniki oparte na WinAPI dopasowane do obiektów OMF bcc32c i bcc32 linkowanych przez każdą obsługiwaną wersję Delphi Win32
  • Win64: importy msvcrt.dll oraz małe stuby pomocnicze wymagane przez obiekty COFF64 wygenerowane przez MSVC
  • Typy wspólne: PtrInt i PtrUInt utrzymują deklaracje o rozmiarze wskaźnika zgodne w obu targetach

Zobacz też