For the time being, Delphi XE is only available on my box, I don't know wether Delphi 2010/XE2 has introduced some breaking changes.
Please help me to update the following definition:
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;
Thanks in advance.
The information I need can be grabed from the unit system.pas. While I check it as Delphi XE version, I discover also that the VMT depend on the CPU (Blame it on me, it obvious / search for the {$IF defined(CPUX64)}
directive for further details).
I'm interested in 32 bits Windows platform.
A quick review of XE2's
System.pas
doesn't show any differences in the ordering and content of the VMT. There's an{$IFDEF CPUX64}
for different offsets for thevmt*
values, but the order and types seem to be the same. There's definitely nothing new in the areas you have marked with ???