Einzelnen Beitrag anzeigen

Findus

Registriert seit: 19. Dez 2006
2 Beiträge
 
#16

Re: Eure Anregungen für das DEC 5.3 gebraucht

  Alt 20. Mai 2010, 08:28
Hallo,

habe soeben ein D5 Projekt auf D2009 umgestellt. Dabei habe ich erst an der DEC-5.1 rumgefummelt, bis ich dann die Dec-5.2 gefunden habe. Mit zwei Fehler habe ich mit zu kämpfen gehabt.

1) Zu erst waren alle Identity gleich (in der 5.2 wohl gelößt). Doch ich konnte es auch in der 5.1 zum laufen bringen, indem ich die Procedure CRCTab in eine Konstante umsetzte.

Code:
  const
  CRCTab : TCRCTab = (
      (Poly:$000000D1; Bits:8; Init:$00000000; FInit:$00000000; Inverse:true),  // CRC_8  GSM/ERR
      (Poly:$00000233; Bits:10; Init:$00000000; FInit:$00000000; Inverse:true),  // CRC_10 ATM/OAM Cell
      (Poly:$0000080F; Bits:12; Init:$00000000; FInit:$00000000; Inverse:true),  // CRC_12
      (Poly:$00008005; Bits:16; Init:$00000000; FInit:$00000000; Inverse:true),  // CRC_16 ARC;IBM
      (Poly:$00001021; Bits:16; Init:$00001D0F; FInit:$00000000; Inverse:false),  // CRC_16 CCITT ITU
      (Poly:$00008408; Bits:16; Init:$00000000; FInit:$00000000; Inverse:true),  // CRC_16 XModem
      (Poly:$00864CFB; Bits:24; Init:$00B704CE; FInit:$00000000; Inverse:false),  // CRC_24
      (Poly:$9DB11213; Bits:32; Init:$FFFFFFFF; FInit:$FFFFFFFF; Inverse:true),  // CRC_32
      (Poly:$04C11DB7; Bits:32; Init:$FFFFFFFF; FInit:$FFFFFFFF; Inverse:true),  // CRC_32CCITT
      (Poly:$04C11DB7; Bits:32; Init:$FFFFFFFF; FInit:$00000000; Inverse:true)  // CRC_32ZModem
      );
Die Procedure CRCTab erinnerte mich an meine Assembler Zeiten vor 30 Jahren. Daten in Code zu speichern wurde nicht richtig umgesetzt. Auch sollten wohl bald Daten und Code sauber getrennt sein, so das ich es in der 5.2 für mich geändert habe.

2) Alte Daten konnte ich nicht mehr einlesen, da die Identity geändert haben. Schuld war die geänderte Erzeugung der Indentiy nun ein widestring mit 512 Bytes und damals ein ansistring mit 256 Bytes. Klar das die dann unterschiedlich sein muss. Für mich habe ich das dann so geändert:

Code:
class function TDECObject.Identity: LongWord;
var
  Signature: AnsiString;
begin
  Signature := AnsiString(StringOfChar(#$5A, 256 - Length(Classname)) + UpperCase(ClassName));
  Result := CRC32(IdentityBase, Signature[1], Length(Signature));
end;
Da der Classname sicher ohne Fehler auf AnsiString abzubilden ist, wäre das kein Problem das so zu machen. Da aber die 5.2 mit widestring geht, sollte man dies mit einer Compilerdirektive in der Source machen. Dass man das sogar programmiertechnisch macht, um alte und neue Dateien zu lesen, ist wohl ein größere Aufwand.

Gruß
Thomas
  Mit Zitat antworten Zitat