AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

Ein Thema von Assertor · begonnen am 10. Sep 2008 · letzter Beitrag vom 11. Sep 2008
Antwort Antwort
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 10. Sep 2008, 09:34
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:
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;
Anbei auch meine Testversion der LHSZ.pas.

Gruß Assertor
Angehängte Dateien
Dateityp: pas lhsz_163.pas (40,6 KB, 11x aufgerufen)
Frederik
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 09:51
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
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 09:58
Hallo Assertor

Ich habe die Test Prozedur kurz unter D6 getestet. Auch dort wird nur ein Leertext ausgegeben.

ShowMessage(PlainText); // hier wird nur ein sehr großer ~ 1400/6000 Char großer Leertext ausgegeben, da Data leer ist
Thomas
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 10:07
Hallo toms,

Zitat von toms:
Ich habe die Test Prozedur kurz unter D6 getestet. Auch dort wird nur ein Leertext ausgegeben.
Ok, dann steckt in der Version schon ein Fehler...

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
Angehängte Dateien
Dateityp: pas lhsz_161.pas (40,6 KB, 4x aufgerufen)
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 10:09
Bei der original kommt dieser Fehler:

Zitat:
---------------------------
Project1
---------------------------
Error: Error in LHSZ library
---------------------------
OK
---------------------------
Thomas
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 10:11
Hi Toms,

ok, vielen Dank fürs Testen! Zurück ans Zeichenbrett also

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 16:37
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:
{$IFOPT O+}
  {$DEFINE UseASM}
{$ENDIF}
abändern in

Delphi-Quellcode:
{$IFOPT O+}
  {$DEFINE _UseASM}
{$ENDIF}
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.

Gruß Hagen
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: Debugging Hilfe bei Hagens DEC, hier LHSZ.pas

  Alt 11. Sep 2008, 18:27
Hi Hagen,

Zitat von negaH:
Mache mal folgendes:

1. schmeiße PLHInflate/TLHInflate komplett aus dem Source raus
2. in LHDecode benutzt du nun SizeOf(TLHData) statt TLHInflate
Wir verstehen uns beide Hatte ich schon im jetzigen Test hier genau so ausprobiert, auch UseAsm war bei mir schon aus.

Nur hab ich:
Delphi-Quellcode:
{$IFOPT O+}
  {.$DEFINE UseASM}
{$ENDIF}
gemacht.

Gleiches Ergebnis: Leerer Outputstring...

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz