0
RTTI 및 Addr (필드)로 필드의 동일한 포인터를 가져올 수 있습니까?Delphi - RTTI로 동일한 필드 포인터 가져 오기 e Addr
예 :
TSomeClass
개인 FSomeField : 정수;
...
1) MyPointer = 번지 기능 (FSomeField) >> SameField에서 $ 12345
2) RTTI 포인터 >> $ 12345
RTTI 및 Addr (필드)로 필드의 동일한 포인터를 가져올 수 있습니까?Delphi - RTTI로 동일한 필드 포인터 가져 오기 e Addr
예 :
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.
나는 이해할 수 없다. 당신의 코드가 원하는 함수의 입력으로 정확히 무엇입니까 –
특정 함수에서 RTTI로 필드의 포인터를 얻고 함수 외부에서 Addr (Field)로 같은 포인터를 얻고 싶습니다. –
제 의견을 다시 읽어주십시오. 아마도 우리가 작성할 수있는 함수 선언을 보여줄 수 있습니다. –