In Delphi 2006 hatte ich folgende Methoden zum Komprimieren und Dekomprimieren mit Zlib (aus Delphi 2006)
procedure CompressStream(inpStream, outStream: TStream);
var
InpBuf, OutBuf: Pointer;
InpBytes, OutBytes: Integer;
begin
InpBuf := nil;
OutBuf := nil;
try
GetMem(InpBuf, inpStream.Size);
inpStream.Position := 0;
InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
end;
{ Decompress a stream }
procedure DecompressStream(inpStream, outStream: TStream);
var
InpBuf, OutBuf: Pointer;
OutBytes, sz: Integer;
begin
InpBuf := nil;
OutBuf := nil;
sz := inpStream.Size - inpStream.Position;
if sz > 0 then
try
GetMem(InpBuf, sz);
inpStream.Read(InpBuf^, sz);
DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
outStream.Position := 0;
end;
Was muss ich ändern, damit sie in Delphi 2009 funktionieren?
1 Stimmen
Es wäre hilfreich, wenn Sie die Fehler und vielleicht etwas Code posten würden?
0 Stimmen
Sie müssen uns genau sagen, welche Fehler Sie erhalten und welche Funktion Sie aufgerufen haben, als Sie sie erhielten.
1 Stimmen
Ich vermute, dass FastZlib PChar anstelle von PAnsiChar verwendet. In Delphi 2009 SizeOf(Char) = 2 und nicht 1 Byte, wie es in Delphi 2006 war.