Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variante Records? (https://www.delphipraxis.net/14996-variante-records.html)

Pseudemys Nelsoni 20. Jan 2004 12:50


Variante Records?
 
hoi,

ich glaub ich lese mein Delphi Buch schon zum 3ten mal und bleibe immer wieder an der gleichen Stelle hängen - Variante Records, ich weiss gar nicht was für ein vorteil ich mit ihnen habe bzw wie sie funktionieren, ich weiss nur das sie immer den gleichen speicher belegen(?).
Hat jemand eine internetseite mit einem guten beispiel wo man soetwas braucht oder nen Tip?

mfg

Christian Seehase 20. Jan 2004 19:37

Re: Variante Records?
 
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.

Pseudemys Nelsoni 24. Jan 2004 16:46

Re: Variante Records?
 
hoi, sehe den thread erst jetzt wieder, :D. Danke für die Erklärung :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 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