You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:52:39