目前,Delphi XE仅在我的盒子上可用,我不知道Delphi 2010 / XE2是否引入了一些重大变化。
请帮我更新以下定义:
TVmt = packed record
SelfPtr : TClass;
IntfTable : Pointer;
AutoTable : Pointer;
InitTable : PFieldTable;
TypeInfo : PTypeInfo;
FieldTable : Pointer;
MethodTable : Pointer;
DynamicTable : Pointer;
ClassName : PShortString;
InstanceSize : Cardinal;
Parent : PClass;
{$IFDEF DELPHI2009_UP}
Equals : Pointer;
GetHashCode : Pointer;
ToString : Pointer;
{$ENDIF}
{$IFDEF DELPHIXE_UP}
// ???
{$ENDIF}
{$IFDEF DELPHIXE2_UP}
// ???
{$ENDIF}
SafeCallException : PSafeCallException;
AfterConstruction : PAfterConstruction;
BeforeDestruction : PBeforeDestruction;
Dispatch : PDispatch;
DefaultHandler : PDefaultHandler;
NewInstance : PNewInstance;
FreeInstance : PFreeInstance;
Destroy : PDestroy;
{UserDefinedVirtuals: array of procedure;}
end;
提前致谢。
我需要的信息可以从单位 system.pas 中获得。当我把它检查为Delphi XE版本时,我发现VMT依赖于CPU(责怪它,我很明显/搜索{$IF defined(CPUX64)}
指令以获取更多细节。)
我对32位Windows平台感兴趣。
答案 0 :(得分:3)
对XE2 System.pas
的快速回顾并未显示VMT的顺序和内容有任何差异。对{$IFDEF CPUX64}
值的不同偏移量有vmt*
,但顺序和类型似乎相同。你用???标记的区域肯定没什么新东西。