Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как получить имя выполняемой процедуры? / 15 сообщений из 15, страница 1 из 1
26.09.2006, 15:06
    #34012946
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
Уважаемые господа! Собственно, вопрос измложен в названии темы: как получить имя выполняемой процедуры? Если можно, пример с куском кода, плиз.
...
Рейтинг: 0 / 0
26.09.2006, 15:18
    #34012989
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
хм... по моему никак....
а для чего это нужно? Может есть другие обходные методы решения вашей проблемы...
...
Рейтинг: 0 / 0
26.09.2006, 15:21
    #34012998
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
orunbek , конечно, можно. Например, присваивать текстовой переменной в каждой процедуре ее имя. Но то вручную и надо внимательно при возвращении из других процедур присваивать имя заново. Неудобно.
А нужно это, к примеру, для вынесения в заголовок сообщения об ошибке.
Наверняка есть API функция. Не может не быть.
...
Рейтинг: 0 / 0
26.09.2006, 15:31
    #34013038
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
для vb скорее всего есть, vb куда угодно производительность разбазаривает, лишь бы не саму программу.
так ведь получается
...
Рейтинг: 0 / 0
26.09.2006, 15:35
    #34013054
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
Кроме как переменными нельзя. Скомпилируй прогу и попытайся найти в экзешнике название какой-нибудь процедуры. Скомпилированная процедура - это блок инструкций со смещением относительно начального адреса, занятого прогой в памяти, откуда взяться имени? В экзешнике можно найти только имена публичных и френдовых свойств и методов классов, потому что к ним нужно обращаться извне. Приватные названия не хранятся, к таким процедурам идет обращение по адресу.

Так что никакой апи для этого нет.
...
Рейтинг: 0 / 0
26.09.2006, 15:41
    #34013078
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
Antonariy , спасибо, внушает! А в случае VBA, когда нет exe-шника?
...
Рейтинг: 0 / 0
26.09.2006, 15:54
    #34013126
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
"... А в случае VBA, когда нет exe-шника?"

With Application.VBE.ActiveCodePane
.GetSelection StartLine, Startcolumn, EndLine, EndColumn
CurrentProc = .CodeModule.ProcOfLine(StartLine, vbext_pk_Proc)
End With
...
Рейтинг: 0 / 0
26.09.2006, 15:59
    #34013150
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
Агромадный реШпект вам, VladConn !
Вот только что "вертел в руках" VBE.ActivecodePane :)
...
Рейтинг: 0 / 0
26.09.2006, 16:04
    #34013178
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
My pleasure
...
Рейтинг: 0 / 0
27.09.2006, 06:50
    #34014284
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
noisette orunbek , конечно, можно. Например, присваивать текстовой переменной в каждой процедуре ее имя. Но то вручную и надо внимательно при возвращении из других процедур присваивать имя заново. Неудобно.
А нужно это, к примеру, для вынесения в заголовок сообщения об ошибке.
Наверняка есть API функция. Не может не быть.
Таким методом конечно можно, я про метод, когда из любой процедуры одной функцией узнать имя процедуры
...
Рейтинг: 0 / 0
27.09.2006, 08:54
    #34014375
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
... Таким методом конечно можно, я про метод, когда из любой процедуры одной функцией узнать имя процедуры...

Такое сделать можно, но вы наврядли это захотите. Сложно. Плюс требуется особая компиляция для создания PDB файла (опция Create Cymbolic Debug Info). Вот здесь описано (на английском), как такое делается:

http://www.fawcette.com/vsm/2002%5F05/magazine/columns/blackbelt/

Регистрация бесплатна и занимает 2 секунды.

Там используются АПИ функции. Например эта:

Private Declare Function StackWalk Lib _
"dbghelp" (ByVal MachineType As _
Long, ByVal hProcess As Long, _
ByVal hThread As Long, ByRef _
StackFrame As StackFrame, ByVal _
ContextRecord As Long, ByVal _
ReadMemoryRoutine As Long, ByVal _
FunctionTableAccessRoutine As Long, _
ByVal GetModuleBaseRoutine As Long, _
ByVal TranslateAddress As Long) As Long


Полный код автора я не нашел. Но там его адрес, можете попросить самого автора. Статья с подробным описанием метода и кусками кода написана Dan Fergus и называется Get Debug Info From Production Apps. Написана для журнала Visual Studio в 2002 году.

VladConn
...
Рейтинг: 0 / 0
27.09.2006, 09:02
    #34014392
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
Спасибо VladConn, это интересно что есть такие методы, пополним базу мозгов по программированию на VB :-)
...
Рейтинг: 0 / 0
27.09.2006, 09:10
    #34014406
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
ОК. Там, на самом деле, можно сгрузить и код. Я сейчас это сделал, но, похоже, они что-то там напутали. Какой-то другой код, не от статьи.
...
Рейтинг: 0 / 0
27.09.2006, 09:18
    #34014428
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
Я им только что отослал email с просьбой отыскать для меня нужный файл, это их вина. Посмотрим, все таки статье четыре года.
...
Рейтинг: 0 / 0
27.09.2006, 09:49
    #34014519
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить имя выполняемой процедуры?
С помощью CodeSMART можно автоматически добавлять / удалять имена функций в код всего проекта, указанного модуля или отдельгого блока кода.
В результате из каждой процедуры можно узнать каком классе / модуле; какая процедура и на какой строке сейчас выполняется.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как получить имя выполняемой процедуры? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]