C と同じレイアウトを含むレコードを Delphi で宣言したいと考えています。
興味のある方へ : このレコードは、Windows OS の LDT_ENTRY レコードのユニオンの一部です。(私は Delphi で Xbox エミュレーターに取り組んでいるため、Delphi でこのレコードを使用する必要があります。sourceforge のプロジェクト Dxbx を参照してください)。
とにかく、問題のレコードは次のように定義されています。
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;
私の知る限り、Delphi では可能なビット フィールドはありません。私はこれを試しました:
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;
しかし悲しいことに、サイズは予想される 4 ではなく 10 バイトになります。同じレイアウト、同じサイズ、同じメンバーを持つレコードを取得するために、レコードを宣言する方法を知りたいです。ゲッター/セッターの負荷がないことが望ましいです。
ティア。