Thema: Delphi Variante Records?

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Variante Records?

  Alt 20. Jan 2004, 19:37
Moin Pseudemys Nelsoni,

in diesem Thread
Double in zwei Integer
hatte ich mal ein Beispiel für die Anwendung von Varianten Records gepostet.

Der Platz, den der Variante Teil belegt, wird bestimmt von der grössten Teilvariante.
Folgenden (verfremdeter ) Ausschnitt aus einem meiner Programme benutze ich zum Lesen einer Datei

Delphi-Quellcode:
  TcsD2S5CCPH = packed record
    dwMC : DWORD;
    dwMB : DWORD;
    dwSC : DWORD;
    dwSB : DWORD;
    dwCL : DWORD;
    case byte of
      $3F : (dwCE_3F : DWORD;);
      $5F : (dwGII_5F : DWORD;);
      $7F : (dwCE_7F : DWORD;
             dwGII_7F : DWORD;);
      $9F : (dwGIS_9F : DWORD;);
      $BF : (dwCE_BF : DWORD;
             dwGIS_BF : DWORD;);
      $DF : (dwGII_DF : DWORD;
             dwGIS_DF : DWORD;);
      $FF : (dwCE_FF : DWORD;
             dwGII_FF : DWORD;
             dwGIS_FF : DWORD;);
  end;
Der gesamte Record ist 32 Byte gross, da er sich aus 5 festen DWORD Werten und maximal 3 variablen (bei $FF) zusammensetzt.
In Abhängigkeit eines anderen Wertes aus der Datei haben die gelesenen Werte an der gleichen Stelle eine unterschiedliche Bedeutung (wie man eventuell an den Bezeichnern ablesen kann.
Im Wesentlichlichen dient also das erste Beispiel (im genannten Thread), der unterschiedlichen Interpretation von Werten, im zweiten dokumentatorischen Zwecken.
Wichtig: Auch die im zweiten gemachte Angabe der Case Label dient nur der Dokumentation. Ich hätte die auch einfach von 0 bis 6 durchnummerieren können, und statt "case byte of" wäre auch "case integer of". Damit es funktioniert muss nur ein Aufzählungstyp angegeben werden, der für die erforderliche Anzahl der zu unterscheidenden Fälle gross genug ist. Ich habe mich nur für Werte entschieden, die den möglichen Werten aus der Datei entspricht, damit das ganze übersichtlicher wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat