Brug miniLZO i Delphi



Sådan bruger miniLZO biblioteket skrevet i ANSI C i dit delphi program uden en dll

Introduktion

LZO er en tabsfri komprimering algoritme, der tilbyder Ekstremt hurtig dekompression hastighed og samtidig give dig en anstændig kompressionsforhold. Jeg har læst, at LZO er dobbelt så hurtig som ZLIB at dekomprimere mens kun har omkring 5% mindre kompressionsforhold.

miniLZO

Er et bibliotek fra forfatteren til LZO der omfatter LZO1X_1 kompression og LZO1x dekompression. Jeg har udarbejdet det til en .obj fil, der kan knyttes til en delphi enhed ved hjælp af {$ LINK} / {$ L} compiler direktivet. Nedenfor finder du den komplette enhed. miniLZO distribueres under GNU Public License, så naturligvis denne kode GNU licens også. Bemærk, for detaljerede instruktioner om, hvordan du bruger disse funktioner kan du besøge den officielle LZO hjemmeside på http://www.oberhumer.com/opensource/lzo/.

// ------------------------- BEGIN UNIT --------------------- ---- //

Enheden Lzo;

grænseflade

// "C" rutiner er nødvendige af den tilknyttede LZO OBJ fil

funktion _memcmp (S1, S2: Pointer, numBytes: langtord): heltal, cdecl;

procedure _memcpy (S1, S2: Pointer; n: Integer) cdecl;

procedure _memmove (dstP, srcP: pointer; numBytes: langtord) cdecl;

procedure _memset (s: Pointer c: Byte; n: Integer) cdecl;

{$ LINK 'minilzo.obj'}

funktion lzo1x_1_compress (const Kilde: Pointer; SourceLength: langtord; Dest: Pointer, var DestLength: langtord; WorkMem: Pointer): integer; stdcall; ekstern;

funktion lzo1x_decompress (const Kilde: Pointer; SourceLength: langtord; Dest: Pointer, var DestLength: langtord; WorkMem: Pointer (* IKKE ANVENDT *)!): Integer; stdcall; ekstern;

funktion lzo1x_decompress_safe (const Kilde: Pointer; SourceLength: langtord; Dest: Pointer, var DestLength: langtord; WorkMem: Pointer (* IKKE ANVENDT *)!): Integer; stdcall; ekstern;

funktion lzo_adler32 (Adler: langtord, konst Buf: Pointer; Len: langtord): langtord; stdcall; ekstern;

funktion lzo_version: ord; stdcall; ekstern;

funktion lzo_version_string: PChar; stdcall; ekstern;

funktion lzo_version_date: PChar; stdcall; ekstern;

implementering

procedure _memset (s: Pointer c: Byte; n: Integer) cdecl;

begynde

FillChar (s ^, n, c);

ende;

procedure _memcpy (S1, S2: Pointer; n: Integer) cdecl;

begynde

Flyt (s2 ^, s1 ^, n);

ende;

funktion _memcmp (S1, S2: Pointer, numBytes: langtord): heltal, cdecl;

Var

i: integer;

P1, P2: ^ byte;

begynde

p1: = S1;

P2: = s2;

for i: = 0 til numBytes -1 do

begynde

hvis p1 ^ <> p2 ^ derefter

begynde

hvis p1 ^ <p2 ^ derefter

Resultat: = -1

andet

Resultat: = 1;

exit;

ende;

Inc (P1);

Inc (p2);

ende;

Resultat: = 0;

ende;

procedure _memmove (dstP, srcP: pointer; numBytes: langtord) cdecl;

begynde

Flyt (srcP ^, dstP ^, numBytes);

FreeMem (srcP, numBytes);

ende;

ende.

// ------------------------- End Unit --------------------- ---- //

C miniLZO kilde, kan minilzo.obj og denne enhed skal Downloade herfra.

Det var det! Jeg appologize for mit somtimes dårlige engelsk og skrivestil.

Relaterede artikler