Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

Можно ли в методе объекта узнать название метода?   Найти похожие ветки 

 
Дмитрий Белькевич ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
2-1178335416
tetris
2007-05-05 07:23
2007.05.27
Как затереть CD/DVD RW диск?


3-1173733501
Андрей123
2007-03-13 00:05
2007.05.27
Как послать на Delphi комманду SQL: UPDATE


15-1177746092
iXT
2007-04-28 11:41
2007.05.27


2-1178401907
ctudent
2007-05-06 01:51
2007.05.27
Что это?


15-1177471515
SerJaNT
2007-04-25 07:25
2007.05.27
Еще один вопрос по PHP :)