【发布时间】:2010-07-02 08:44:40
【问题描述】:
给定一个记录类型:
TItem = record
UPC : string[20];
Price : Currency;
Cost : Currency;
...
end;
字段的名称作为字符串,我怎样才能得到该字段在记录中的偏移量?我需要在运行时执行此操作 - 要访问的字段的名称在运行时决定。
例子:
var
pc : Integer;
fieldName : string;
value : Currency;
begin
pc := Integer(@item); // item is defined and filled elsewhere
fieldName := Text1.Text; // user might type 'Cost' or 'Price' etc
Inc(pc, GetItemFieldOffset(fieldName)); // how do I implement GetItemFieldOffset?
value := PCurrency(pc)^;
..
我正在使用 Delphi 7。
【问题讨论】:
-
@joe 是的,我知道它的味道。我实际上并没有将文本框绑定到此;这只是我能想到的最简单的例子来说明这个问题。它实际上是一种规则引擎的一部分,它执行可以通过名称引用数据库字段的命令。问题是在执行此代码时,相关字段已经加载到记录中。
-
最后我使用了手动维护的 if-else,完全删除了指针,只是将
name : string映射到value : currency。
标签: delphi pointers struct delphi-7 rtti