Announcement

Collapse
No announcement yet.

Packed Reacord

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Packed Reacord

    Frage zu folgendem Problem:
    <pre>
    type prFehler = packed record
    Size : Cardinal;
    Data : array[1..4] of ShortInt;
    Data2 : array[1..8] of Boolean;
    end;
    </pre>
    Ist diese Konstellation möglich, und wie Groß müßte dabei die Size Angabe sein?
    Ist eine weitere Verschachtelung auch möglich ?

  • #2
    Hi Marcus,<br><br>
    natürlich ist diese Konstellation möglich.<br>
    Size ist: 1x4 Byte (Cardinal) + 4x1 Byte (ShortInt) + 8x1 Byte (Boolean) = 16 Byte groß. Allerdings solltest du die Größe lieber mit SizeOf() ermitteln als sie fest einzutragen, so ist dein Programm einfacher zu warten.<br>
    Was du mit „weitere Verschachtelung“ meinst ist mir nicht ganz klar.
    <br><br>
    Bye Marti

    Comment


    • #3
      Auch weitere Verschachtelungen sind möglich:<br>

      <pre>

      type
      TMyRecord = packed record
      Feld1: Integer;
      Feld2: Integer;
      end;<br>

      TFehler = packed record
      Size: Cardinal;
      Data: array[0..3] of ShortInt;
      Reco: TMyRecord;
      case Integer of
      0: (Test1: Integer; Reco1: TMyRecord);
      1: (Test2: Word; Reco2: TMyRecord);
      3: (Test3: Byte; Reco3: TMyRecord);
      end;<br>

      </pre>

      Mit Fehler.Test1 oder Fehler.Reco1.Feld1 usw. kann auf den "variablen" Recordbereich von TFehler zugegriffen werden. D.h. obiges Beispiel demonstriert einen variablen Recordtyp.<br>
      Alle Felder in der Case Deklaration nutzen den gleichen Speicherbeich im Record.<br>

      Gruß Hagen <br>

      PS: da Du mit type prFehler = packed record... einen TYP deklarierst solltest Du dich an die Delphi/BPascal Spezifiklationen halten und prFehler als TFehler oder TPrFehler deklarieren. Kurzgesagt: es ist üblich Typen mit einem führendem "T" zu versehen.<br&gt

      Comment

      Working...
      X