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 に答える