delphi - Delphi XE中如何通过指针获取记录的类型信息?

标签 delphi pointers delphi-xe record rtti

如果我有一个 TList,其中包含许多不同记录类型的指针,我如何访问 TList 中不同记录的值?

有没有什么办法可以获取那些引用的记录的记录类型或类型信息?

我目前正在使用 Delphi XE。

最佳答案

不同的记录类型需要一个共同的标题。然后,您可以首先将列表项指针转​​换为该 header 类型,以确定接下来要转换为哪种记录类型。例如:

type
  TRecType = (recA, recB, recC);

  PRecHeader = ^TRecHeader;
  TRecHeader = record
    RecType: TRecType;
    ...
  end;

  PRecordA = ^TRecordA;
  TRecordA = record
    Header: TRecHeader;
    IntValue: Integer;
  end;

  PRecordB = ^TRecordB;
  TRecordB = record
    Header: TRecHeader;
    StrValue: String;
  end;

  PRecordC = ^TRecordC;
  TRecordC = record
    Header: TRecHeader;
    DblValue: Double;
  end;

var
  PRec: Pointer;
begin
  PRec := List[Index];
  case PRecHeader(PRec)^.RecType of
    recA: use PRecordA(PRec)^.IntValue as needed ...
    recB: use PRecordB(PRec)^.StrValue as needed ...
    recC: use PRecordC(PRec)^.DblValue as needed ...
  end;
end;

关于delphi - Delphi XE中如何通过指针获取记录的类型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7825678/

相关文章:

delphi - 避免在 Delphi XE2 下对元素进行蒙皮

Delphi Graphics32透明层画线

delphi - 在 TDateTimePicker 中将无效日期显示为禁用

delphi - 在 Delphi 中,有一种使用 FireDAC 备份和恢复数据库的方法

Delphi DBGrid 项目中所有 DBGrid 的备用行颜色

c++ - 带有 std::map<T*, U> 的程序是否具有明确定义的行为?

delphi - 当 Delphi 处于覆盖模式时,如何改变它的光标形状?

c - 关于指针、数组和malloc

c - 从文件读入指向结构的指针

delphi - 如何使用DLL中包含的标志?