Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
ВнизИмя метода или функции Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c