![]() |
![]() ![]() ![]() ![]() |
|
Как прочитать весь список Published методовDelphi , Компоненты и Классы , RTTIАвтор: http://www.lmc-mediaagentur.de
procedure EnumMethods(aClass: TClass; lines: TStrings);
type
TMethodtableEntry = packed record
len: Word;
adr: Pointer;
name: ShortString;
end;
{Note: name occupies only the size required, so it is not a true shortstring! The actual
entry size is variable, so the method table is not an array of TMethodTableEntry!}
var
pp: ^Pointer;
pMethodTable: Pointer;
pMethodEntry: ^TMethodTableEntry;
i, numEntries: Word;
begin
if aClass = nil then
Exit;
pp := Pointer(Integer(aClass) + vmtMethodtable);
pMethodTable := pp^;
lines.Add(format('Class %s: method table at %p', [aClass.Classname,
pMethodTable]));
if pMethodtable <> nil then
begin
{first word of the method table contains the number of entries}
numEntries := PWord(pMethodTable)^;
lines.Add(format(' %d published methods', [numEntries]));
{make pointer to first method entry, it starts at the second word of the table}
pMethodEntry := Pointer(Integer(pMethodTable) + 2);
for i := 1 to numEntries do
begin
with pMethodEntry^ do
lines.Add(format(' %d: len: %d, adr: %p, name: %s', [i, len, adr,
name]));
{make pointer to next method entry}
pMethodEntry := Pointer(Integer(pMethodEntry) + pMethodEntry^.len);
end;
end;
EnumMethods(aClass.ClassParent, lines);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
memo1.clear;
EnumMethods(Classtype, memo1.lines);
end;
Для чтения всей списка опубликованных методов можно использовать процедуру Вот пример, как это сделать: В коде вашей формы добавьте обработчик события клика кнопки следующим образом: В процедуре Вот как это работает:
Поместите Вот пример вывода: Обратите внимание, что это код только для опубликованных методов. Если вы также хотите перечислить неопубликованные методы, вам нужно использовать другой подход. Также помните, что это рекурсивный алгоритм и может вызвать переполнение стека, если иерархия классов очень глубока или имеет много вложенных классов с большим количеством методов. В статье описывается процедура EnumMethods для чтения списка Published методов класса в Delphi, которая выводит информацию о каждом методе, включая длину, адрес и имя метода. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||