Einzelnen Beitrag anzeigen

Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#1

DEC 5.2 Fehler unter Delphi 2009 (?)

  Alt 17. Dez 2008, 11:59
Hallo,

ich bin gerade auf das folgende Problem gestoßen: Eine Logik, die unter Delphi 2007 funktioniert liefert unter Delphi 2009 falsche Ergebnisse. Hier der Code der Unit-Tests (DEC5_xyz bezeichnet die Unit xyz aus DEC 5.2)
Delphi-Quellcode:
procedure TTestgoDecUnitHashes.TestHashHEX;
var
  strResultV3: ANSIString;
  strResultV5: ANSIString;
  cResult: Cardinal;
begin
  // FText (:ANSIString) := 'This is a confidential ANSI Text';
  strResultV3 := '03BEBC72'; //Hash.THash_CRC32.CalcString(FText, nil, fmtHEX);

  cResult := DEC5_CRC.CRCCalc(CRC_32CCITT, PAnsiChar(FText)^, Length(FText));
  strResultV5 := DEC5_DECFmt.TFormat_HEX.Encode(cResult, 4);

  CheckEqualsString(strResultV3, strResultV5);
end;

procedure TTestgoDecUnitHashes.TestHashHEX_new;
var
  strResultV3: ANSIString;
  strResultV5: ANSIString;
  cResult: Cardinal;
  objCRCDef: DEC5_CRC.TCRCDef;
  strKey: ANSIString;
  cVector: Cardinal;
begin
  // FText (:ANSIString) := 'This is a confidential ANSI Text';
  strResultV3 := '03BEBC72'; //Hash.THash_CRC32.CalcString(FText, nil, fmtHEX);

  DEC5_CRC.CRCSetup(objCRCDef, $04C11DB7, 32, $FFFFFFFF, $FFFFFFFF, True);
  DEC5_CRC.CRCCode(objCRCDef, PAnsiCHar(FText)^, Length(FText));
  cResult := DEC5_CRC.CRCDone(objCRCDef);

  strResultV5 := DEC5_DECFmt.TFormat_HEX.Encode(cResult, 4);

  CheckEqualsString(strResultV3, strResultV5);
end;
Die beiden obigen Unit-Tests laufen durch, wenn sie unter Delphi 2007 kompiliert werden. Unter Delphi 2009 jedoch schlägt der erste Test fehl. Das Problem dürfte darin liegen, daß der Hash im ersten Fall mit CRCInit initialisiert wird (aufgerufen von CRCCalc), was bei mir unter Delphi 2009 komische Werte liefert. Bug oder Feature?

Grüße,
Uli
  Mit Zitat antworten Zitat