Integração de bibliotecas C entre plataformas

Visão geral

O HotPDF usa HPDFCLibs.pas como a ponte voltada ao Pascal entre o Delphi e os arquivos objeto C com link estático usados por HPDFZLib.pas, HPDFJpeg.pas e HPDFTiff.pas. A unidade expõe os símbolos de runtime que essas bibliotecas esperam, mantendo uma única camada consistente de declarações Pascal para builds Win32 e Win64.

Key Features

  • Ponte de runtime compartilhada para zlib-ng em modo compatível com zlib, despacho SIMD em runtime do zlib-ng de 64 bits, libjpeg-turbo 3.1.90 com objetos NASM SIMD e libtiff 4.7.1
  • Cobertura de memória, stdio, string/caractere e helpers selecionados de matemática/runtime
  • Ponte de malloc, free, realloc e calloc alinhados a 32 bytes para buffers nativos SIMD-friendly
  • Compatibilidade Win32 com objetos OMF zlib-ng construídos pelo bcc32c e objetos OMF JPEG/TIFF construídos pelo bcc32 de Lib\thirdparty\Win32
  • Compatibilidade Win64 com arquivos obj COFF64 de Lib\thirdparty\Win64 e objetos COFF zlib-ng de Lib\thirdparty\Win64x
  • Tipos auxiliares do tamanho de ponteiro e stubs Pascal para símbolos que o linker do Delphi não consegue importar diretamente

Backend JPEG de alto desempenho

Os fluxos JPEG padrão são respaldados pela libjpeg-turbo 3.1.90 por meio da API clássica compatível com libjpeg exposta por HPDFJpeg.pas. Os builds de objetos Win32, Win64 e Win64x incluem os objetos relevantes de aceleração NASM SIMD, e o mesmo conjunto de objetos empacotado também está disponível para a camada de integração TIFF no tratamento de TIFF comprimidos com JPEG.

Notas sobre a bridge zlib-ng

Streams de imagens Flate no Win64 usam uma pequena ponte C em torno da compressão one-shot do zlib-ng. A ponte mantém os tipos nativos de comprimento do zlib-ng dentro do C, preservando os comprimentos de buffer de 32 bits voltados ao Pascal do HotPDF e o comportamento de compressão máxima.

Os builds de objetos zlib-ng Win64x e MSVC Win64 de diagnóstico incluem implementações SSE2, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ e AVX2 despachadas em runtime, com fallbacks genéricos. O Win32 mantém os objetos OMF genéricos do zlib-ng para compatibilidade com o bcc32c, enquanto o caminho JPEG/TIFF de Win32 segue nos objetos OMF clássicos do bcc32.

Supported Function Groups

  • Memory Management: malloc, free, realloc, calloc com alocação alinhada a 32 bytes
  • File and Stream Operations: fopen, fclose, fputc, fread, fwrite, fflush, ferror
  • String and Character Functions: strcpy, sprintf, memcpy, memmove, memset, tolower, toupper, towlower, towupper, getenv, atoi
  • Runtime Helpers: ftol, setjmp, log, snprintf, memcmp

Architecture Support

  • Win32: wrappers Pascal e helpers respaldados na WinAPI que correspondem aos objetos OMF bcc32c e bcc32 ligados por todas as versões suportadas de Delphi Win32
  • Win64: imports de msvcrt.dll mais pequenos stubs auxiliares exigidos pelos objetos COFF64 gerados pelo MSVC
  • Common Types: PtrInt e PtrUInt mantêm declarações do tamanho de ponteiro alinhadas nos dois alvos

See Also