gpt4 book ai didi

Delphi - 使用 RTTI e Addr 获取相同的字段指针

转载 作者:行者123 更新时间:2023-12-03 19:40:56 24 4
gpt4 key购买 nike

我可以使用 RTTI 和 Addr(Field) 获得相同的字段指针吗?

例如:

TSomeClass

私有(private)的
FSomeField:整数;

...

1) MyPointer = Addr(FSomeField) >> $12345

2) 来自 SameField 的 RTTI 指针 >> $12345

最佳答案

实际上,您只需要获取 RTTI 字段偏移量( TRttiField.Offset )并将其添加到初始对象地址(实例地址)。

type
TTest = class(TObject)
private
FInt : integer;
FString : string;
FBool : boolean;
end;

var t : TTest;
ctx : TRttiContext;
f : TRttiField;
begin

t := TTest.Create();
try
writeln(Format('FInt: %p',[@t.FInt]));
writeln(Format('FString: %p', [addr(t.FString)]));
writeln(Format('FBool: %p', [@t.FBool]));

writeln('--------------');
//field address using rtti
ctx := TRttiContext.Create();
try
for f in ctx.GetType(t.ClassType).GetFields() do begin
writeln(Format('%s: %8x', [f.Name, NativeInt(t) + f.Offset]));
end;
finally
ctx.Free();
end;

finally
t.Free();
end;
readln;
end.

关于Delphi - 使用 RTTI e Addr 获取相同的字段指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com