Здравствуйте, Danchik:
Да — но это не работает! И из VMT можно достать все!!! методы , кроме, если я не ошибаюсь , динамических .
Сразу после вызова
aTable = nil
пишу GetMethodNames(TForm,memo1.Lines);
D>Здравствуйте, Аноним, Вы писали:
D>Что то типа этого ?
D>D>procedure GetMethodNames(aClass: TClass; List: TStrings);
D>type
D> TMethodTable = packed record
D> Count: SmallInt;
D> //[...methods...]
D> end;
D>var
D> aTable : ^TMethodTable;
D> aName : ^ShortString;
D> K : Integer;
D>begin
D> List.BeginUpdate;
D> try
D> while aClass <> nil do
D> begin
D> asm
D> mov EAX, [aClass]
D> mov EAX,[EAX].vmtMethodTable { fetch pointer to method table }
D> mov [aTable], EAX
D> end;
D> if aTable <> nil then
D> begin
D> aName := Pointer(PChar(aTable) + 8);
D> for K := 1 to aTable.Count do
D> begin
D> if List.IndexOf (aName^) < 0 then
D> List.Add (aName^);
D> aName := Pointer(PChar(aName) + length(aName^) + 7)
D> end;
D> end;
D> aClass := aClass.ClassParent;
D> end;
D> finally
D> List.EndUpdate;
D> end;
D>end;
D>
D>Учти, работает только в случае когда метод published