2012-04-15 6 views
3

Delphi XE ist vorerst nur auf meiner Box verfügbar, ich weiß nicht, ob Delphi 2010/XE2 einige bahnbrechende Änderungen eingeführt hat.TObject virtuelle Signaturen zu aktualisieren, bis Delphi XE2

Bitte helfen Sie mir die folgende Definition zu aktualisieren:

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; 

Vielen Dank im Voraus.


Die Informationen, die ich brauche kann system.pas aus dem Gerät grabed werden. Während ich es als Delphi XE-Version überprüfe, entdecke ich auch, dass die VMT von der CPU abhängt (Schuld ist mir, es ist offensichtlich/suche nach der {$IF defined(CPUX64)} Direktive für weitere Details).

Ich interessiere mich für 32-Bit-Windows-Plattform.

+1

Siehe [Internal_Data_Formats] (http://docwiki.embarcadero.com/RADStudio/en/Internal_Data_Formats). Sieht nicht so aus, als ob es irgendwelche Änderungen gäbe. –

+0

@ LU RD: Zeiger-Steckplätze von * Equals/GetHashCode/ToString * sind nicht vorhanden. Sie sollten sich zwischen dem * Zeiger auf einen Zeiger auf die Vorgängerklasse * <=> 'Parent' (Offset -36) und * Zeiger auf den Einstiegspunkt der SafeCallException-Methode * <=>' SafeCallException' (Offset -34) befinden. Es scheint eher eine Delphi 2007 VMT zu sein. – menjaraz

+0

Ja, das sehe ich jetzt. Dokumentation ist nicht immer auf dem neuesten Stand, aber Programmierer müssen sein :) –

Antwort

3

Eine kurze Überprüfung der XE2 System.pas zeigt keine Unterschiede in der Reihenfolge und Inhalt der VMT. Es gibt eine {$IFDEF CPUX64} für verschiedene Offsets für die vmt* Werte, aber die Reihenfolge und Typen scheinen identisch zu sein. Es gibt definitiv nichts Neues in den Bereichen, die Sie mit markiert haben ???