将虚拟方法的签名更新到德尔福XE2


目前

,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},但顺序和类型似乎是相同的。在你用???标记的区域绝对没有什么新东西

最新更新