這將(希望)得到解決蠻快的,這是我的問題:中SizeOf動態結構
我有一個結構
PMacro = ^TMacro;
TMacro = class
Hotkey: Integer;
Command: String;
CTRLMode: boolean;
RepeatInterval: integer;
constructor Create(Hotkey: Integer; Command: String; CTRLMode: boolean; RepeatInterval: integer); overload;
constructor Create; overload;
procedure Execute;
end;
,我需要得到它的大小(通過TFileStream的保存) 。該類的實例存儲在一個列表其他地方,這是我的日常節省:
Stream:=TFileStream.Create(FileName,fmCreate or fmOpenWrite);
for i := 0 to Macros.Count-1 do
begin
Macro:=TMacro(Macros[i]);
Size:=sizeof(Macro);
Stream.Write(size,SizeOf(integer));
Stream.Write(Macro,sizeof(Macro));
end;
sizeof運算(微距)返回4字節,這將是指針,但我需要的實際空間的特定情況下發生。我首先想到的是得到Length(Command)
,因爲它是一個返回指針大小的動態結構。但是這意味着有類似SizeOf(Integer)+Length(Command)+SizeOf(boolean)+...
的東西,但這對於進一步擴展TMacro結構是不利的。
那麼,有沒有辦法獲得包含動態類型的結構的大小?
謝謝你的答案
您能否創建一個將實例保存在TMacro中的過程? – Ryan 2011-05-06 16:20:55
你是什麼意思?如果你的意思是我創建了一個程序,它通過所有元素逐一去保存,然後是的,我可以(但我認爲有更好的方法)。但似乎我無法通過一次調用保存整個宏實例,因爲**字符串**類型。 – 2011-05-06 16:29:00
我基本上是指梅森惠勒所說的。 – Ryan 2011-05-06 16:32:06