Я хотел бы объявить запись в Delphi, которая содержит тот же макет, что и в C.
Для заинтересованных: эта запись является частью объединения в записи LDT_ENTRY в ОС Windows. (Мне нужно использовать эту запись в Delphi, потому что я работаю над эмулятором Xbox в Delphi - см. Проект Dxbx на sourceforge).
В любом случае соответствующая запись определяется как:
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. Я хотел бы знать, как я должен объявить запись, так что я получаю запись с тем же макетом, одинаковым размером и теми же членами. Предпочтительно без нагрузок геттеров/сеттеров.
ТИА.