[fpc-pascal] sizeof TTypeKind?

Sven Barth pascaldragon at googlemail.com
Sat Mar 21 16:15:18 CET 2020


Am 21.03.2020 um 08:47 schrieb Ryan Joseph via fpc-pascal:
>
>> On Mar 21, 2020, at 9:39 AM, Ryan Joseph via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
>>
>> I'm going to loop through the fields of the record and get the size of each
>> field so I can serialize the record. Am I not on the right track?
> No answers on this so I'm thinking maybe I need to use TManagedField^.FldOffset to get the information I need about the field size. Is that correct way to get the field size using record RTTI?

For the primitve types you need to know the sizes at compile time (e.g. 
SizeOf(Word), SizeOf(LongInt), etc.) and check what type the field has 
using the field list in the record's RTTI. You also have to keep in mind 
that some types are grouped. E.g. tkInteger is for all integer types 
that are smaller than 64-bit. The real type is then available as 
TTypeData.OrdType and you need to handle that size accordingly. For 
structured types like records the size is contained in the RTTI. The 
FldOffset field is important to get the correct offset of a field, 
because padding might be involved depending on the platform (except if 
your record is "packed").

Regards,
Sven


More information about the fpc-pascal mailing list