3

目前,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 平台感兴趣。

4

1 回答 1

3

对 XE2 的快速回顾System.pas并没有发现 VMT 的顺序和内容有任何差异。这些值有{$IFDEF CPUX64}不同的偏移量vmt*,但顺序和类型似乎相同。你标记的区域肯定没有什么新东西???

于 2012-04-15T07:38:34.580 回答