Форум: "Основная";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизМожно ли в методе объекта узнать название метода? Найти похожие ветки
← →
Дмитрий Белькевич © (2007-03-24 22:44) [0]Сабж, в общем?
← →
Loginov Dmitry © (2007-03-24 23:02) [1]В общем случае нет. Однако если метод объявлен в секции published, и для класса сгенерирована RTTI, то наверно как-то можно.
← →
Alexey (AZ) (2007-03-25 16:33) [2]Учитывая ограничения предыдущего автора...
procedure TForm1.FormCreate(Sender: TObject);
var
p : pointer;
begin
asm
mov eax, offset FormCreate
mov p, eax
end;
Caption := MethodName(p);
end;
← →
Alexey (AZ) (2007-03-25 16:36) [3]Только для этого надо знать название метода... :)
← →
Alexey (AZ) (2007-03-25 16:47) [4]А если вы извращенец, то можно тупо посканить на наличие методов...
procedure TForm1.FormCreate(Sender: TObject);
var
p : pointer;
i : integer;
s : ShortString;
begin
ListBox1.Items.BeginUpdate;
for i := 0 to $F00000 do begin
asm
mov eax, $400000
add eax, i
mov p, eax
end;
s := MethodName(p);
if s <> "" then
ListBox1.Items.Append( s );
end;
ListBox1.Items.EndUpdate;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
//
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//
end;
← →
RASkov (2007-03-25 17:42) [5]> [3] Alexey (AZ) (25.03.07 16:36)
> Можно ли в методе объекта узнать название метода?
> Только для этого надо знать название метода... :)
Приколист :)
← →
0leg © (2007-03-29 00:08) [6]
> Можно ли в методе объекта узнать название метода?
Ты пишешь самомодифицирующийся вирус-компилятор? А почему именно на Дельфи??
← →
Дмитрий Белькевич © (2007-03-30 00:07) [7]Ага, именно это и пишу - на мой сайт глянь.
Спасибо всем ответившим. Нет - так нет...
← →
Германн © (2007-03-30 00:58) [8]
> Дмитрий Белькевич © (30.03.07 00:07) [7]
>
> Ага, именно это и пишу - на мой сайт глянь.
>
А к чему опубликованному на твоём сайте относится вопрос? И каким образом относится?
P.S. Никакой подколки или иронии. Просто любопытно для чего это может быть нужно?
← →
Дмитрий Белькевич © (2007-03-30 11:49) [9]Стек процедур журналировать иногда нужно. А относиться ко всему. Во всём и нужно.
← →
Loginov Dmitry © (2007-03-30 13:10) [10]В принципе можешь сгенерировать MAP-файл с именами процедур, а в нем по адресу процедуры можно и имя процедуры определить. Правда далеко не для всех процедур имя заносится в MAP-файл, но в качестве определенного шага к решению данного вопроса должно сойти.
← →
Дмитрий Белькевич © (2007-03-31 06:00) [11]Спасибо за ответ, проблема в том, что много версий программ работает одновременно. И такой подход немного неудобен. Опять же - придется парсер делать (хотя, откровенно говоря, работы на пару часов), что бы парсил в нормальный журнал, т.к. куча адресов почти нечитаема.
Сейчас у меня есть нокторое решение - пришлось повбивать названия всех процедуры и включать логи по мере необходимости. В общем, достаточно хорошо и быстро работает, но на поддержание времени много уходит - вот думаю, как компьютер заставить рутину делать. Склоняюсь к парсеру текстов.
← →
Дмитрий Белькевич © (2007-03-31 06:01) [12]...исходников.
← →
GrayFace © (2007-03-31 09:57) [13]Alexey (AZ) (25.03.07 16:33) [2]
procedure TForm1.FormCreate(Sender: TObject);
var
p : pointer;
begin
asm
mov eax, offset FormCreate
mov p, eax
end;
Caption := MethodName(p);
end;
Caption := MethodName(@TForm1.FormCreate) ?
← →
Джо © (2007-03-31 10:02) [14]> Caption := MethodName(@TForm1.FormCreate) ?
А почему бы сразу не Caption := "TForm1.FormCreate"?
← →
Дмитрий Белькевич © (2007-03-31 12:25) [15]К сожалению:
If Address does not point to a published method of the object, MethodName returns an empty string.
(с) Delphi help
← →
Джо © (2007-03-31 12:33) [16]Какой смысл вообще писать MethodName (SomeMethod), если с тем же успехом можно захардкорить "SomeMethod"?
← →
Дмитрий Белькевич © (2007-03-31 23:36) [17]В принципе, как вариант, можно методы нумеровать, вместо именования...
Принципиальных плюсов это не имеет, но ресурсов меньше будет юзаться, это да...
← →
Суслик © (2007-04-01 00:05) [18]можно
← →
Alexey (AZ) (2007-04-01 10:51) [19]
> > Caption := MethodName(@TForm1.FormCreate) ?
>
> А почему бы сразу не Caption := "TForm1.FormCreate"?
Потому что вместо @TForm1.FormCreate можно сунуть любой указатель как в примере от
> Alexey (AZ) (25.03.07 16:47) [4]
. И все published методы будут просканены.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c