Case Integer of starts the variant part of the record. Each variant is identified by an ordinal value. This value has no meaning when the type is being used, but is required for declaration.
Please note the difference between a variant (case-) record and a record without case-declaration.
The following translation is wrong:
type
PProcessHeapEntry = ^TProcessHeapEntry;
TProcessHeapEntry = Record
lpData: Pointer;
cbData: DWord;
cbOverhead: Byte;
iRegionIndex: Byte;
wFlags: Word;
Block: Record
hMem: Thandle
Reserved : Array [0..2] of DWord;
end;
Region: Record
dwCommittedSize: DWord;
dwUnCommittedSize: DWord;
lpFirstBlock: Pointer;
lpLastBlock: Pointer
end);
end;
This wrong translation would cause Block and Region to be consecutive in memory, and not overlaid, as follows:
LpData, cbData, cbOverhead, iRegionIndex, wFlags
HMem, dwReserved
DwCommittedSize, dwUnCommittedSize, lpFirstBlock, lplastBlock