RTTI中的TTypeInfo有些奇怪
从TypInfo.pas中这段代码看起来,PTypeData是从TTypeInfo中读取的。
function GetTypeData(TypeInfo: PTypeInfo): PTypeData; assembler;
asm
{ -> EAX Pointer to type info }
{ <- EAX Pointer to type data }
{ it's really just to skip the kind and the name }
XOR EDX,EDX
MOV DL,[EAX].TTypeInfo.Name.Byte[0]
LEA EAX,[EAX].TTypeInfo.Name[EDX+1]
end;
可是TTypeInfo中TypeData的定义已经注释掉了。
TTypeInfo = record // TTypeInfo 是 RTTI 信息的结构
Kind: TTypeKind; // RTTI 信息的数据类型
Name: ShortString; // 数据类型的名称
{TypeData: TTypeData} // RTTI 的内容
end;
请问这是怎么回事?
[解决办法]
TTypeData是变长数据,GetTypeData获取了一个访问指针,实际使用起来类似于
var pti: PTypeInfo;
pti := GetMem(SizeOf(TTypeInfo) + SizeOf(变长数据类型));