【发布时间】:2010-08-09 18:41:18
【问题描述】:
如果您对 Delphi 内部结构进行了足够多的研究,您会发现一些关于编译器生成的 TTypeInfo 记录的奇怪且显然未记录的内容。如果 PTypeInfo 指向地址 X 处的 TTypeInfo 记录,在X - 4,您会发现接下来的 4 个字节描述了指向 X 的指针。例如:
procedure test(info: PTypeInfo);
var
addr: cardinal;
ptr: PPointer;
begin
addr := cardinal(info);
writeln('addr: ', addr);
dec(addr, 4);
ptr := PPointer(addr);
addr := cardinal(ptr^);
writeln('addr: ', addr);
end;
将编译器生成的任何合法的 PTypeInfo 传递给这个例程,它会输出相同的地址两次。我在 TypInfo.pas 中浏览了一下,但我没有看到任何提到这个“身份指针”或它的用途的东西。有谁知道为什么会这样?从至少 D3 到 D2010 的每个版本的 Delphi 似乎都是如此。
【问题讨论】:
-
我假设上面的代码中缺少
var... -
@Andreas:在哪里?我没有看到任何缺失的变量...
标签: delphi pointers rtti internals