Если вы хотите, чтобы SizeOf предоставил вам размер записи, который вы могли бы затем сохранить в двоичном формате, вы могли бы (хотя я лично не рекомендую сохранение двоичной записи) использовать тип RECORD.
Я считаю,что ясность в этом вопросе требует не только ответа Дэвида и Масонов, но также и принципа:
Если SizeOf (RECORDTYPE) - то, что вы хотите выяснить, сначала используйте RECORD (не Class), второе - 100Типы значений%, такие как массив Char (не String), приводят к записи Binary Persistable:
type
TMyCharType = UnicodeChar; // or AnsiChar. Your choice.
PMacro = ^TMacro;
TMacro = record
Hotkey: Integer;
Command: Array [0..1000] of TMyCharType;
CTRLMode: Boolean;
RepeatInterval: integer;
end;
В качестве стиля я бы предпочел систему на основе классов, которая использует более продвинутый стиль персистентности.чем основанное на записи двоичное хранилище.Но если это то, что вы ХОТИТЕ делать, то используйте RECORD, как я уже сказал, а не Class, и не используйте String.
Кроме того, обратите внимание, что в вашем примере кода PMacro = ^ TMacro действительно хуже- неправильно, если TMacro - это класс.(Если вы действительно не хотите делать какую-то косвенную косвенную указатель.)
TMacro (ссылочные типы) уже являются ссылочными, поэтому нет необходимости брать их адреса, потому что они передаются внутри междупеременные типа TMacro (если это класс) в качестве указателя.Так что вам действительно нужно получить некоторую ясность в отношении типов записей и типов значений в вашем коде.