Delphi如何确定哪个程序调用另一个程序?

Orh*_*nar 3 delphi

我怎样才能确定谁叫​​了Showme程序?

procedure Showme(str:string);
begin
  ShowMessage(str);
end;

procedure btnclick(sender:TObject);
begin
  Showme("test");
end;

procedure btn2click(sender:TObject);
begin
  Showme("test");
end;
Run Code Online (Sandbox Code Playgroud)

编辑:困惑

Showme(654, '654'); // procedure name, string
Showme(654, '564');
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 9

一个过程没有内置的方法来知道哪个过程调用它.如果您真的需要知道,可以使用堆栈跟踪,但实际上只需要调试那种数据.对于实际执行,重要的是传递给例程的数据,而不是传递给它的地方.这是结构化编程的基本原则之一.如果两个不同的例程使用相同的数据调用相同的过程,则应将它们视为相同.

你究竟在做什么,你需要能够分辨出什么?可能有一种更简单的方法来实现它.


Edu*_*uro 8

为什么不传递一个不同的常量甚至是调用它作为Showme参数的过程的名称?可以分析堆栈以确定调用函数的名称,但它要复杂得多,您需要添加有关链接的信息(映射文件).Jedi的JCL有一些功能可以帮助你,但我会使用一个额外的参数.

  • 确实只有两个答案:传递一个参数; 或者看一下调用堆栈.调用堆栈很复杂,使用它来控制程序流不是一个好主意(如果你从其他地方调用Showme()会发生什么?)你可以查看你所拥有的参数,但这也不可靠. (3认同)