// *** before: ***
// there was no type that promised 32 bits everywhere by name. Integer
// and Cardinal happened to be 32-bit, and code written against a C
// header relied on that by convention
type
TApiHeader = record
Magic: Cardinal; // meant to be exactly 32 bits
Size: Integer;
end;
// *** in version XE8: ***
type
TApiHeader = record
Magic: FixedUInt; // 32 bits unsigned on every platform
Size: FixedInt; // 32 bits signed on every platform
end;
begin
Writeln(SizeOf(FixedInt)); // 4
Writeln(SizeOf(FixedUInt)); // 4
Writeln(High(FixedUInt)); // 4294967295
// the point of the pair is talking to C++ and to system headers: the
// size is part of the type name and does not move with the platform
end;