델파이에서 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;
는 지금까지 내가 아는 한, 델파이 수없는 비트 필드가없는 :로
어쨌든, 문제의 레코드가 정의된다.
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.
정말 좋은 생각입니다. – gabr
칭찬에 감사드립니다. 나는 코드에서 몇 가지 실수를 저 지르지 만, 지금은 해결했습니다. 건배! – PatrickvL
감사합니다. 매우 유용합니다. '플래그'는 정수 유형이 아니어야합니다. – JustMe