我想在 Delphi 中声明一条记录,其中包含与 C 中相同的布局。
对于那些感兴趣的人:此记录是 Windows 操作系统的 LDT_ENTRY 记录中联合的一部分。(我需要在 Delphi 中使用此记录,因为我正在 Delphi 中开发 Xbox 模拟器 - 请参阅 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;
但是很可惜:它的大小变成了 10 个字节,而不是预期的 4 个。我想知道我应该如何声明记录,以便获得具有相同布局、相同大小和相同成员的记录。最好没有大量的 getter/setter。
TIA。