Wie simulieren bit-Felder in Delphi records?

Möchte ich erklären, ein record in Delphi, enthält das gleiche layout, wie es in C.

Für Interessierte : Dieser Datensatz ist Teil einer union, die in der Windows OS ist LDT_ENTRY aufnehmen. (Ich muss an dieser Datensatz in Delphi, weil ich arbeite an einer Xbox-emulator in Delphi - Projekt-Dxbx auf sourceforge).

Trotzdem, die Platte in Frage wird definiert als:

    struct
    {
        DWORD   BaseMid : 8;
        DWORD   Type : 5;
        DWORD   Dpl : 2;
        DWORD   Pres : 1;
        DWORD   LimitHi : 4;
        DWORD   Sys : 1;
        DWORD   Reserved_0 : 1;
        DWORD   Default_Big : 1;
        DWORD   Granularity : 1;
        DWORD   BaseHi : 8;
    }
    Bits;

Soweit ich weiß, gibt es keine bit-Felder möglich in Delphi. Ich habe versucht dies:

 Bits = record
      BaseMid: Byte; // 8 bits
      _Type: 0..31; // 5 bits
      Dpl: 0..3; // 2 bits
      Pres: Boolean; // 1 bit
      LimitHi: 0..15; // 4 bits
      Sys: Boolean; // 1 bit
      Reserved_0: Boolean; // 1 bit
      Default_Big: Boolean; // 1 bit
      Granularity: Boolean; // 1 bit
      BaseHi: Byte; // 8 bits
  end;

Aber ach: es ist die Größe wird von 10 bytes, statt der erwarteten 4.
Ich würde gerne wissen, wie ich sollte erklären, den Datensatz, so dass ich eine Aufnahme erhalten, die das gleiche layout, die gleiche Größe und den gleichen Mitgliedern. Vorzugsweise ohne Lasten von getter/setter.

TIA.

InformationsquelleAutor PatrickvL | 2008-11-11
Schreibe einen Kommentar