如:procedure Methord
begin
  //可以打印出‘Methord’
  //别说用ShowMessage('Methord');
  //我需要这个'Methord'能够通过一种方法获得,而不是手工写出来的
end;

解决方案 »

  1.   

    欢迎大家加入DELPHI程序员群1805366 ,一起交流技术!
      

  2.   

    ai ,慢了MethodName
    Returns a string containing the name of the method located at Address.
      

  3.   

    哈哈,MethodName可不那么好用哦,只不过可以完成楼主所需要的功能罢了,具体的还需要楼主努力。对于Delphi偶实在是菜鸟都不如。
      

  4.   

    MethodName是对对象的,无对象的完全不行
      

  5.   

    无对象,没有办法因为Delphi在编译的时候,除对象以外,所有的名字全部被去掉了。但对象是有RTTI的。你看看编译原理就知道了。除非你自己实现一个reflector机制
      

  6.   

    看到一篇文章,没准能给大家提供一个思路
    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的实现。

      

  7.   

    -----------------
    因为Delphi在编译的时候,除对象以外,所有的名字全部被去掉了。但对象是有RTTI的。
    -----------------汗,刚才还在想,能不能用汇编什么的得到函数的名字,当我上一帖没说
      

  8.   

    其实我的想法源于希望实现一个能够帮助调试程序的日志系统,
    在调用这个系统的函数输出日志的时候,自动输出调用者的名称,
    有点类似于Delphi的工具CPU中查看代码时的效果
      

  9.   

    那楼主就看看相关Debug的钩子或者API之类的吧,Debug也需要靠的是debug信息。