读书人

RTTI中的TTypeInfo有点奇怪

发布时间: 2013-09-28 10:01:20 作者: rapoo

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(变长数据类型));


当然上述变长数据类型结构是兼容TTypeData的,这么做是为了节省内存。

读书人网 >.NET

热点推荐