Форум: "Прочее";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
ВнизКак бы все-таки получить имя функции в ран тайме? Найти похожие ветки
← →
Kolan © (2009-06-18 12:59) [0]Здравствуйте!
Помню, что эта тема обсуждалась, но не помню чем дело кончилось.
Хочется мне достаточной простой вещи — получить имя функции в виде строки внутри этой самой функции.
То есть вот так:procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage("FormCreate");
end;
Только чтобы"FormCreate"
(или что-то подобное"TForm1.FormCreate"
или"procedure TForm1.FormCreate(Sender: TObject);"
, например) было подставлено автоматически.
Как бы это сделать. Ведь компилятор-то видит эти имена.
← →
Kolan © (2009-06-18 13:00) [1]Название получилось не корректное, прошу прощения.
← →
Eraser © (2009-06-18 13:01) [2]> [0] Kolan © (18.06.09 12:59)
в published методое наверно это возможно, в остальных - нет, при нормальных условиях. ерундой занимаешься по-моему.
← →
Palladin © (2009-06-18 13:02) [3]http://delphimaster.net/view/1-1225802818/
← →
Kolan © (2009-06-18 13:04) [4]Почему ерундой? Только в published — не годится.
Объясню еще раз, я выразился не точно. Не в ран тайме, а пофигу где (я на компиляцию намекаю), лишь бы в работающей программе строка с именем функции была и причем автоматически.
← →
Eraser © (2009-06-18 13:09) [5]> [4] Kolan © (18.06.09 13:04)
> Почему ерундой?
а зачем это может понадобиться? вот мне не очень понятно.
← →
Kolan © (2009-06-18 13:10) [6]Palladin, в по ссылке ответ [3]?
Не, это не годится. Слишком сложно. Для чего это мне хочется использовать:
Для конструкции видаprocedure TForm1.FormCreate(Sender: TObject);
begin
raise Exception.Create(<вставь сюда имя метода>);
end;
Если пользоваться примером, то мне придется, как я понял, явно указать метод, а я хочу чтобы компилятор сам его вставил.
← →
Kolan © (2009-06-18 13:11) [7]Eraser, а нужно это для того, чтобы добавить в ошибку информацию о том где она в коде. Например в haXe такое сделать очень просто.
← →
Eraser © (2009-06-18 13:14) [8]> [7] Kolan © (18.06.09 13:11)
для этого есть спец. средства, в т.ч. и бесплатные, с помощью которых можно и ценрализованно перехватывать исключения и получать полноценный стек вызовов, см. к примеру JCL debug.
← →
Игорь Шевченко © (2009-06-18 13:25) [9]
> Хочется мне достаточной простой вещи — получить имя функции
> в виде строки внутри этой самой функции.
при наличии сгенерированого map-файла и парсера этого map-файла или при наличии debug information и парсера debug information задача решается поиском имени по адресу функции.
← →
Kolan © (2009-06-18 13:31) [10]Благодарю Eraser, скачал библиотеку, посмотрю. А документация на этот инструмент есть, а то я что-то найти не могу.
Правильно ли я понял, что ответ на мой вопрос — надо написать эксперт для ИДЕ, а как — см. JEDI?
← →
Kolan © (2009-06-18 13:32) [11]Игорь, а парсер, конечно, писать надо, так?
← →
pasha_golub © (2009-06-18 13:36) [12]EurekaLog тебе в помощь. Оч. советую. Сами юзаем
← →
Игорь Шевченко © (2009-06-18 13:39) [13]Kolan © (18.06.09 13:32) [11]
Можно поискать
← →
Kolan © (2009-06-18 13:45) [14]pasha_golub, посмотрю, благодарю.
← →
Sapersky (2009-06-18 14:53) [15]а парсер, конечно, писать надо, так?
Может быть это поможет:
http://delphimaster.net/view/1-1225802818/
← →
Eraser © (2009-06-18 15:40) [16]> [11] Kolan © (18.06.09 13:32)
> а парсер, конечно, писать надо, так?
ты все таки посмотри JCL, лишние вопросы задавать перестанешь )
эврика еще лучше, но платная.
← →
Германн © (2009-06-18 17:19) [17]
> pasha_golub © (18.06.09 13:36) [12]
>
> EurekaLog тебе в помощь.
+1
← →
Пит (2009-06-18 17:27) [18]
> EurekaLog тебе в помощь. Оч. советую. Сами юзаем
а можно вкратце и желательно на примере пояснить ее основные фишки?
← →
Германн © (2009-06-18 17:38) [19]
> Пит (18.06.09 17:27) [18]
>
>
> > EurekaLog тебе в помощь. Оч. советую. Сами юзаем
>
>
> а можно вкратце и желательно на примере пояснить ее основные
> фишки?
http://eurekalog.com/tutorials.php
← →
Kolan © (2009-06-26 13:21) [20]EurekaLog — отличная штука, благодарю!
← →
oxffff_ (2009-06-26 13:26) [21]
> Как бы все-таки получить имя функции в ран тайме?
Посмотри мой блог
For russian fellow Maaacheba or getting method name dynamically
http://santonov.blogspot.com/2009/02/for-russian-fellow-maaacheba-or-getting.html
← →
oxffff_ (2009-06-26 13:38) [22]Пример использования.
procedure TForm1.StaticMethod;
begin
showmessage(MethodName(GetMethodAddress));
end;
procedure TForm1.VirtualMethod(a,b,c,d:integer);
begin
showmessage(MethodName(GetMethodAddress));
end;
← →
Kolan © (2009-06-26 14:39) [23]oxffff_, посмотрел, благодарю, но, честно говоря, готовый продукт мне по сабжу полезнее самодельной мульки :)
← →
TUser © (2009-06-26 17:10) [24]Имхо, сабж - вредное занятие. Да, сделать можно, через RTTI или парсер исходников в ресурсе, но вредно. Функция должна что-то делать, а не называться. Такое реально может понадобиться только с случае управления поведением программы из какого-нибудь движка или ide. Но в первом случае тоже не сложно написать список функций с названиями и сгенерить модуль с их вызовами. Во всяком случае просто и гарантировано от взлома.
← →
Германн © (2009-06-28 01:02) [25]
> Kolan © (26.06.09 13:21) [20]
>
> EurekaLog — отличная штука, благодарю!
>
Кстати. Не надо считать сей продукт панацеей. Это очень хороший инструмент, но и очень сложный инструмент. И для правильного и эффективного его использования в готовой для распространения программе нужно его изучить и грамотно использовать предоставляемые им возможности. Иначе работа программы будет ещё хуже, чем без Эврики.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.005 c