目前
,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;
提前谢谢。
我需要的信息可以从单位系统.pas中获取。当我将其检查为Delphi XE版本时,我还发现VMT依赖于CPU(归咎于我,很明显/搜索{$IF defined(CPUX64)}
指令以获取更多详细信息)。
我对32位Windows平台感兴趣。
快速回顾一下 XE2 的System.pas
并没有发现 VMT 的顺序和内容有任何差异。vmt*
值的不同偏移量有一个{$IFDEF CPUX64}
,但顺序和类型似乎是相同的。在你用???标记的区域绝对没有什么新东西