Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.49 MB
Время: 0.097 c
2-1178279969
Бульбаш
2007-05-04 15:59
2007.05.27
Ошибка при запуске exe-шника.


15-1177851439
ProgRAMmer Dimonych
2007-04-29 16:57
2007.05.27
Подскажите, пожалуйста, сайт,


3-1173524269
@dimon
2007-03-10 13:57
2007.05.27
Копирование Базы SQL SERVER 2000


2-1178394905
RedBanner
2007-05-05 23:55
2007.05.27
компонент дерево


2-1178575587
Gringoire
2007-05-08 02:06
2007.05.27
Массив из строк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский