Какую структуру VMT вы хотите знать? Вы также знаете, что это внутренняя деталь реализации, которая может быть изменена (и изменилась с течением времени).
Чтобы ответить на ваш конкретный вопрос, вот простой способ узнать количество виртуальных методов для данного класса:
function GetVirtualMethodCount(AClass: TClass): Integer;
begin
Result := (PInteger(Integer(AClass) + vmtClassName)^ -
(Integer(AClass) + vmtParent) - SizeOf(Pointer)) div SizeOf(Pointer);
end;
Это работает, потому что я знаю, что строка, представляющая имя класса, помещается сразу после всех векторов виртуальных методов в VMT.
Я также знаю, что существует 11 виртуальных методов (для D2009, 9 для D2007 и ранее) на всех объектах TO, которые отрицательно смещены от самого указателя VMT.
Вот причина ссылки на vmtParent.
Наконец, используя ссылку на класс TClass, вы можете передать любой производный класс TObject в эту функцию и получить количество виртуальных методов.