我想知道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)
,它总是返回一个空字符串
如何在类中获取方法的指针?
答案 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,但仍在进行中。