-2
Delphi может выровнять записи на словах, словах с двойным словом и четырех словах в зависимости от настройки {$A}
и версии Delphi.Как определить, на каком смещении Delphi выравнивает поля моей записи
Если я должен следующий (плохой) код:
ofSize = $00; <<-- hardcoded will break if I unpack the record.
ofMSB = $01;
ofPtrDigits = $02;
ofSign = $06;
MinSizeBigint: Byte = 10;
type
TBigint = packed record
Size: Byte;
MSB: Byte;
PtrDigits: Pointer;
Sign: TSignValue;
Как превратить его в это:
type
TBigint = record
PtrDigits: Pointer; (*should be `array of cardinal`, but never mind that*)
Size: Byte;
MSB: Byte;
Sign: TSignValue;
ofSize = OffsetOf(TBigInt.Size); <<-- does a function like this exist?
ofMSB = OffsetOf(TBigInt.Size);
ofPtrDigits = OffsetOf(TBigInt.Size);
ofSign = OffsetOf(TBigInt.Size);
Есть ли функция, которая будет заполнять коррекций для меня, используя какая-то магия компилятора?
Совсем недавно обсуждали здесь: http://stackoverflow.com/вопросы/18786986/может, мы орудию-ANSI-CS-offsetof-в-Дельфы –