2

我已经贴了

type  TProcedure = procedure(const messageText : String) of object;

然后有一个该类型的变量,decodeProcedure : TProcedure; 它被分配到不同的地方。

当我停在断点上时,如何查看变量指向的过程?

如果我Debug/evaluateadd watch我收到错误E2035 Not enough actual parameters

(德尔福 XE 2)

4

1 回答 1

5

您可以使用 @ 运算符评估 decodeProcedure 方法的地址,并将该表达式添加到监视列表窗口,以查看您可以使用该local variables窗口的过程点。

试试这个代码

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TProcedure = procedure(const messageText : String) of object;
  TFooClass = class
     decodeProcedure  : TProcedure;
   public
     procedure Bar(const messageText : String);
     procedure DoIt;
  end;

Var
  F : TFooClass;
{ TFooClass }

procedure TFooClass.Bar(const messageText: String);
begin
  Writeln(messageText);
end;

procedure TFooClass.DoIt;
begin
  if Assigned(decodeProcedure) then //put a break point here
   decodeProcedure('Hello');
end;

begin
  try
     F:=TFooClass.Create;
     try
       F.decodeProcedure:=F.Bar;
       F.DoIt;
     finally
      F.Free;
     end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

这是一个示例 IDE 屏幕截图

在此处输入图像描述

如您所见,该local variables窗口显示了哪个解码过程指向该TFooClass.Bar方法。

更新 您还可以将Self表达式添加到观察列表以获得相同的结果

在此处输入图像描述

于 2012-05-05T01:16:41.717 回答