0
我可以得到與RTTI和地址(字段)的字段相同的指針?德爾福 - 獲取與RTTI e地址相同的字段指針
如:
TSomeClass
私人 FSomeField:整數;
...
1)MyPointer =地址(FSomeField)>>從SameField $ 12345
2)RTTI指針>> $ 12345
我可以得到與RTTI和地址(字段)的字段相同的指針?德爾福 - 獲取與RTTI e地址相同的字段指針
如:
TSomeClass
私人 FSomeField:整數;
...
1)MyPointer =地址(FSomeField)>>從SameField $ 12345
2)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.
我不明白。你的代碼是什麼作爲你想要的功能的輸入 – 2014-09-25 20:00:27
我想在某些函數中使用RTTI獲取字段的指針,並在函數外部使用與Addr(字段)相同的指針。 – 2014-09-25 20:03:35
您能否再次閱讀我的評論。也許你可以展示一個我們可以填寫的函數聲明。 – 2014-09-25 20:07:03