![]() |
String komprimieren
Hi ihrs!
Kann mir mal jemand helfen diesen Code so umzuschreiben, dass ich damit Strings gepackt bekomme??? Mit Pointer hab ichs echt überhauptnicht!
Delphi-Quellcode:
Ich hab folgendes Probiert: (Nur um zu zeigen, dass ich es wenigstens versucht hab :) )
uses
ZLib; 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;
Delphi-Quellcode:
[Edit]Zwei Fehler schon mal selber gefunden :) Es läuft!!![/Edit]
function CompressString(input:string):string;
var InpBuf, OutBuf: Pointer; OutBytes: Integer; begin InpBuf := nil; OutBuf := nil; try GetMem(InpBuf, Length(input)); Move(input[1], InpBuf^, Length(input)); CompressBuf(InpBuf, Length(input), OutBuf, OutBytes); SetLength(result,OutBytes); Move(OutBuf^, result[1], OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; end; Vielen Dank! |
Re: String komprimieren
Wäre nett, wenn du uns die Fehler mitteilen würdest, dann muss der nächste sie nicht selber in deinem Code suchen.
|
Re: String komprimieren
Ich hatte sie schon im Code korrigiert.
Aber ich hier jetzt mal auch noch die Funktion zum ENTpacken des Strings:
Delphi-Quellcode:
uses
ZLib; function CompressString(input:string):string; var InpBuf, OutBuf: Pointer; OutBytes: Integer; begin InpBuf := nil; OutBuf := nil; try GetMem(InpBuf, Length(input)); Move(input[1], InpBuf^, Length(input)); CompressBuf(InpBuf, Length(input), OutBuf, OutBytes); SetLength(result,OutBytes); Move(OutBuf^, result[1], OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; end; function DeCompressString(input:string):string; var InpBuf, OutBuf: Pointer; OutBytes: Integer; begin InpBuf := nil; OutBuf := nil; try GetMem(InpBuf, Length(input)); Move(input[1], InpBuf^, Length(input)); DeCompressBuf(InpBuf, Length(input),0,OutBuf, OutBytes); SetLength(result,OutBytes); Move(OutBuf^, result[1], OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; end; |
Re: String komprimieren
hallo zusammen,
hab ein "kleines" :wall: problem mit dieser funktion:
Delphi-Quellcode:
Unter normalen Umständen funktioniert diese Funktion tadellos.
function DeCompressString(input:string):string;
var InpBuf, OutBuf: Pointer; OutBytes: Integer; begin InpBuf := nil; OutBuf := nil; try GetMem(InpBuf, Length(input)); Move(input[1], InpBuf^, Length(input)); DeCompressBuf(InpBuf, Length(input),0,OutBuf, OutBytes); SetLength(result,OutBytes); Move(OutBuf^, result[1], OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; end; Falls ich aber nun ein Programm habe, das gleichzeitig ca. 40 Threads am laufen hat und alle gleichzeitig einen String entpacken gibt es ab und zu (bisher gemessen ca. alle 6500 mal) einen Fehler bei der Zeile "FreeMem(outBuf)". Und zwar generiert er dort die Fehlermeldung "Invalid pointer operation". Was könnte hier das problem sein? Hab langsam echt keine Ahnung mehr... :gruebel: [edit=sakura] [delphi]Tags Mfg, sakura[/edit] |
Re: String komprimieren
Könntest du evtl. mal ein bissel Code posten??? Danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz