Re[4]: Список методов из VMT
От: ZendCoder  
Дата: 10.05.05 11:13
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.