首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

RTTI中的TTypeInfo有点奇怪

2013-09-28 
RTTI中的TTypeInfo有些奇怪从TypInfo.pas中这段代码看起来,PTypeData是从TTypeInfo中读取的。function GetT

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的,这么做是为了节省内存。

热点排行