![]() |
Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DPler,
ich arbeite gerade etwas an der DEC. Aktuell Sitze ich vor der LHSZ.pas. Für alle, die es nicht wissen: Es ist eine schlanke, effektive Unit für Hufmann-Kompression mit optionaler Verschlüsselung. Die original Unit läuft nur bis ~ D7, darüber knallt es mit AVs, die ich soweit beheben konnte: Im Vergleich zu Hagens Original habe ich die Chars-Deklaration auch im Inflate Record hinzugefügt, da dieser hier fehlte. Das Problem ist nun, daß die Inflate-Funktion scheinbar einen Bug hat, der nur > D7 zum Tragen kommt. Im Debugger sehe ich schon mal, daß in LH.Data nie ein Wert geschrieben wird. Die Frage ist, warum? Kann das bitte mal jemand Testen? Code zum Testen der LHSZ.pas:
Delphi-Quellcode:
Anbei auch meine Testversion der LHSZ.pas.
procedure Test;
var Key, PlainText: String; CipherText: String; Data: Pointer; Res: Integer; begin PlainText := 'יהורם גאון test test test test test test test test test test test test'; Key := 'testpw'; try Res := LHCheck(LHEncodeBuffer(Key, PlainText , Length(PlainText) * SizeOf(PlainText[1]), Data)); try SetString(CipherText, PChar(Data), Res); ShowMessage(CipherText); finally FreeMem(Data); end; except on E: Exception do ShowMessage('Error: ' + E.Message); end; try Res := LHCheck(LHDecodeBuffer(Key, CipherText , Length(CipherText) * SizeOf(CipherText[1]), Data)); try SetString(PlainText, PChar(Data), Res); ShowMessage(PlainText); // hier wird nur ein sehr großer ~ 1400/6000 Char großer Leertext ausgegeben, da Data leer ist finally FreeMem(Data); end; except on E: Exception do ShowMessage('Error: ' + E.Message); end; end; Gruß Assertor |
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Hallo,
nächster Tag. Mal der Hintergrund: Ich möchte gerne DEC D2009 lauffähig bekommen und will gewissenhaft alle Sourceteile prüfen. LHSZ.pas läuft nicht unter D2006, also stecke ich hier fest. Ist jemand bereit zu helfen? Gruß Assertor |
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Hallo Assertor
Ich habe die Test Prozedur kurz unter D6 getestet. Auch dort wird nur ein Leertext ausgegeben.
Delphi-Quellcode:
ShowMessage(PlainText); // hier wird nur ein sehr großer ~ 1400/6000 Char großer Leertext ausgegeben, da Data leer ist
|
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo toms,
Zitat:
Vielen Dank fürs Testen! Anbei mal die "original" LHSZ.pas von Hagen. Kannst Du die bitte kurz einsetzen und das Projekt neuerstellen (oder die .dcu vorher löschen)? Gruß Assertor |
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Bei der original kommt dieser Fehler:
Zitat:
|
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Hi Toms,
ok, vielen Dank fürs Testen! Zurück ans Zeichenbrett also ;) Gruß Assertor |
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Ok, in TLHInflate fehlt wirklich die Deklaration von Chars.
Mache mal folgendes: 1. schmeiße PLHInflate/TLHInflate komplett aus dem Source raus 2. in LHDecode benutzt du nun SizeOf(TLHData) statt TLHInflate so kostet es bei LHDecode() nur par zusätzlich allozierte Bytes im dynamischen Speicher die dann ungenutzt wären, also alle Felder in TLLHData ab .Head[]. Ich hätte gleich Abstand von der Idee nehmen sollen mit zwei fast identischen Records zu arbeiten und statt dessen mit einer Union arbeiten sollen. Und dann noch
Delphi-Quellcode:
abändern in
{$IFOPT O+}
{$DEFINE UseASM} {$ENDIF}
Delphi-Quellcode:
Das deaktiviert permanet die Verwendung des Assembler Codes und stattdessen wird pure PASCAL Source compiliert. Hat natürlich den Nachteil das der Compiler ineffizienteren Code erzeugt, also mehr Code verbraucht und langsammer ist.
{$IFOPT O+}
{$DEFINE _UseASM} {$ENDIF} Gruß Hagen |
Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas
Hi Hagen,
Zitat:
Nur hab ich:
Delphi-Quellcode:
gemacht.
{$IFOPT O+}
{.$DEFINE UseASM} {$ENDIF} Gleiches Ergebnis: Leerer Outputstring... Gruß Assertor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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