当前类方法名称为字符串

时间:2013-12-28 15:01:04

标签: function delphi class methods pascal

我想知道Object Pascal是否有办法获取当前正在执行的方法的名称。

procedure SomeClass.SomeMethod(SomeArgs...);
begin
    { This should print 'This method name is: SomeMethod' }
    WriteLn('This method name is: ' + ???);
end;

看起来TObject在描述中得到了类似于我需要的东西,但我无法使它工作。

 public class function TObject.MethodName(address: pointer): shortstring;

这是我应该去的方式吗? 如果我尝试MethodName(self),它总是返回一个空字符串 如何在类中获取方法的指针?

1 个答案:

答案 0 :(得分:1)

我不知道经典的Object Pascal(Apple的),但Delphi / FPC:

在D2010之前:如果方法发布,则只有RTTI,在其他情况下,程序名称被优化掉。 Unit typinfo是你的朋友,iirc可以使用typeinfo(@ TSomeclass.Somemethod)获取typeinfo。

D2010:有选项可以生成更多RTTI信息。 参见例如RTTI information for method pointer

免费Pascal:2.6.x及以下,与D2010之前一样,2.7.x为D2010,但仍在进行中。