Changes in new versions / Delphi XE8

// *** 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;