Zitat von
Infect:
So, nun habe ich endlich herausgefunden, warum das mit deiner gzdbuf-
Unit bisher nicht funktionierte. Ich habe der Funktion gzb_init als Buffer ein dynamisches Array übergeben, kein statissches wie in deinem Beispiel. Und dynamische Arrays beginnen ja mit dem Index 0 und nicht wie bei dir mit 1.
Was müsste ich ändern, damit das ganze auch mit dynamischen Arrays klappt? Auf jeden Fall bin ich nun wieder einen Schritt weiter.
Hier das angepaßte Demoprogramm für vsd.gz, der interessante Teil sollte unabhängig von dynamisch/statissch sein, wenn Dein Puffer mit Index 0 beginnt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
ibuf: array of byte;
f: file;
gz: gzbuf;
i: integer;
s: string;
begin
assignfile(f,'vsd.gz');
system.reset(f,1);
setlength(ibuf,5000);
blockread(f,ibuf[0],1242);
gz := gzb_init(pBytef(@ibuf[0]),1242); // dies ist der interessante Teil
s := '';
while not gzb_eof(gz) do begin
i := gzb_getc(gz);
if i<0 then break;
if (i>0) and (i<256) then s := s+char(i);
end;
richedit1.Text := s;
end;
Gruß Gammatester