Ich möchte einen Datensatz in Delphi deklarieren, die das gleiche Layout enthält, wie es in C. hatWie simulieren Bit-Felder in Delphi-Datensätzen?
Für Interessenten: Dieser Datensatz Teil einer Vereinigung in der Windows-Betriebssysteme LDT_ENTRY Rekord. (Ich muss diesen Eintrag in Delphi verwenden, da ich in Delphi an einem Xbox-Emulator arbeite - siehe Projekt Dxbx auf sourceforge).
Wie dem auch sei, wird der Datensatz in Frage wie folgt definiert:
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 sind. Ich versuche 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: seine Größe wird 10 Bytes, statt dem erwarteten 4. Ich mag würde zu wissen, wie ich die Platte erklären sollte, so dass ich einen Datensatz mit dem gleichen Layout erhalten , die gleiche Größe und die gleichen Mitglieder. Vorzugsweise ohne viele Getter/Setter.
TIA.
Das ist eine wirklich gute Idee! – gabr
Danke für das Kompliment. Ich habe ein paar Fehler im Code gemacht, die ich jetzt behoben habe, Prost! – PatrickvL
Danke, das ist sehr hilfreich. "Flags" sollte kein Integer-Typ sein? – JustMe