【发布时间】:2011-05-07 03:23:01
【问题描述】:
这将(希望)很快得到解决,这是我的问题:
我有一个结构
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(Macro) 返回 4 个字节,这将是指针,但我需要特定实例占用的实际空间。我想到的第一件事是获取Length(Command),因为它是一个返回其指针大小的动态结构。但这意味着有类似SizeOf(Integer)+Length(Command)+SizeOf(boolean)+... 的东西,但这不利于进一步扩展 TMacro 结构。
那么,有没有办法获取包含动态类型的结构的大小?
感谢您的回答
【问题讨论】:
-
您能创建一个将实例保存在 TMacro 中的过程吗?
-
你这是什么意思?如果您的意思是我创建一个过程,它会逐个遍历所有元素并保存它们,那么是的,我可以(但我认为有更好的方法)。但由于 string 类型,我似乎无法通过一次调用保存整个 Macro 实例。
-
我的意思是@Mason Wheeler 所说的。
-
解释你的反对票,反对票。