我希望在Delphi中声明一个记录(record),其布局与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不支持位域。我已尝试过以下代码:
As far as I know, there are no bit-fields possible in Delphi. I did try this:
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.