Delphi 10.3中TRttiField.GetValue无法获取正确值的问题排查
问题原因及解决方案
你的问题和平台导致Integer与Long类型混淆无关,核心是传递给GetValue的参数错误。
在Delphi中,类变量本身就是指向实例的指针,不需要用@取地址。你写的field.GetValue(@testInstance)传递的是变量testInstance自身的内存地址,而非对象实例的地址,这导致RTTI读取了错误的内存区域,自然得不到预期的5。
修正后的代码
TTestRTTI = class field1: integer; end; procedure testRTTI(); var field : TRttiField; fields: TArray<TRttiField>; testInstance: TTestRTTI; val: Integer; begin testInstance := TTestRTTI.Create(); try // 增加try-finally确保对象释放,避免内存泄漏 testInstance.field1 := 5; fields := TRttiContext.Create().GetType(TypeInfo(TTestRTTI)).GetFields(); for field in fields do begin val := field.GetValue(testInstance).AsInteger; // 去掉@符号 end; OutputDebugString(PChar(val.ToString())); finally testInstance.Free; end; end;
内容的提问来源于stack exchange,提问作者user21138890
相关产品推荐
相关产品推荐

