Вниз
Скачать: CL | DM;

Имя метода или функции   Найти похожие ветки 

← →
kull ©   (2002-04-17 12:21) [0]

Привет всем!
Давно мучающий меня вопрос:
А можно ли каким либо способом, находясь внутри метода, узнать его имя.
Интересуют не только published, но и private,public и protected методы.


← →
Игорь Шевченко ©   (2002-04-17 13:52) [1]

День добрый,

Конечно! Достаточно посмотреть на имя функции или метода :-)

С уважением,


← →
MBo ©   (2002-04-17 14:19) [2]

Этот вопрос несколько раз видел в конфах borland, ответы уклончивые. (анекдот такой есть)

В нашем форуме я тоже поднимал этот вопрос - гуру, к сожалению, не заинтересовались.

вот чего я придумывал, полумеры, конечно.
недо-решение 1 для published
procedure TForm1.Button1Click(Sender: TObject);
var p:pbyte;
function DummyFunc: Pointer;
asm
xor eax, eax
end;
begin
p:=@DummyFunc;
inc(p,4);
label3.caption:=classname+"."+methodname(p);
end;

недо-решение 2

function ACaller:pointer;
asm
mov eax, [esp]
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
var p,p1:pbyte;
begin
p1:=ACaller;
dec(p1,53);
//53-магическое число, зависит от пролога процедуры, например, инициализации строк или дин. массивов
p:=methodaddress("CheckBox1Click");
label3.caption:=inttohex(cardinal(p),8);//для контроля
label4.caption:=inttohex(cardinal(p1),8);
label2.caption:=classname+"."+methodname(p1);
end;

Куда смотреть -
1) изучать состояние стека - кропотливо разбираться надо,
поскольку у задачи практического смысла мало, я не вникал пока
2) генерировать detailed map (linker)
3) сопоставлять адреса из VMT и DMT c текущими



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.007 c
3-94295
anton_private
2002-04-08 14:03
2002.04.29
Как получить список MS SQL серверов в сети?


4-94608
Королев
2002-02-14 11:24
2002.04.29
при импортировании функций из DLL с помощью Tdump ...


1-94462
ruslan_as
2002-04-16 09:23
2002.04.29
Прервать процедуру.


1-94426
Катерина
2002-04-17 14:59
2002.04.29
Форма-фрейм-форма


1-94364
KvORubin
2002-04-16 09:15
2002.04.29
Как коректно дать комманду с одной на другую *.EXE




   Наверх