如:procedure Methord
begin
//可以打印出‘Methord’
//别说用ShowMessage('Methord');
//我需要这个'Methord'能够通过一种方法获得,而不是手工写出来的
end;
begin
//可以打印出‘Methord’
//别说用ShowMessage('Methord');
//我需要这个'Methord'能够通过一种方法获得,而不是手工写出来的
end;
解决方案 »
- 要从小摄像头中抓取一幅图片,如何用DELPHI实现?
- 一个排列函数,看不懂,我想改一下,请问怎么改? (
- 关于带包编译,Express 在主程序与DLL窗体出现"a class named XXX already exists"
- 请问formclose,formclosequery有何区别吗?
- delphi 里面对excel进行排序这样写?
- 有在武汉工作的吗,露个脸,以后大家一起交流呀!
- Delphi7中为什么用dbexpress连不上 MS SQL Server 2000?
- 帮帮忙一个注册的问题?
- 请教一个安装的问题
- 特急:关于excel的格式问题!
- 一个关于如何获取当前记录的记录号的问题,请高手赐教!
- 求助,各位大大向您们请教一个短信发送问题,在此先谢谢了!
Returns a string containing the name of the method located at Address.
http://www.delphibbs.com/keylife/iblog_show.asp?xid=11342003-6-21 11:24:32 使用汇编实现远程函数调用{ No. 19 }//如何通过指针,调用类函数中定义的函数(如下面的:MyFar)?
//如果我们只传递函数指针,然后调用函数的话,我们会发现,在MyFar中不能访问当前类对象的变量FMyText。如果嵌入一段汇编,将当前位置压入栈,然后再调用此函数,则就可以象类函数一样,在其中访问类的变量了。
e.g.
type
pMyRec = ^TMyRec;
TMyRec = record
rStr: String;
rInt: Integer;
end;procedure MyProc(APro: Pointer);
var
CallerBp: Cardinal;
MyRec: TMyRec;
vPt: Pointer;
begin
MyRec.rStr := 'MyRec.rStr';
MyRec.rInt := 'MyRec.rInt';
vPt := Pointer(@MyRec);
asm
mov eax, [ebp]
mov CallerBp, eax
mov eax, vpt
Push CallerBp
end;
end;procedure TMyTemp.SetText(aText: String);
procedure MyFar(aRec: TMyRec);
begin
ShowMessage(Format('%s_%sd_%s', [Self.FmyText, aRec.rStr, aRec.rInt]);
end;
begin
Self.FMyText := 'JoyYuan';
MyProc(Addr(MyFar));
end;{说明:具体例子可以参考:Grids单元中,TSparsePointerArray.ForAll的实现。
}
因为Delphi在编译的时候,除对象以外,所有的名字全部被去掉了。但对象是有RTTI的。
-----------------汗,刚才还在想,能不能用汇编什么的得到函数的名字,当我上一帖没说
在调用这个系统的函数输出日志的时候,自动输出调用者的名称,
有点类似于Delphi的工具CPU中查看代码时的效果