我已经贴了
type TProcedure = procedure(const messageText : String) of object;
然后有一个该类型的变量,decodeProcedure : TProcedure;
它被分配到不同的地方。
当我停在断点上时,如何查看变量指向的过程?
如果我Debug/evaluate
或add watch
我收到错误E2035 Not enough actual parameters
(德尔福 XE 2)
我已经贴了
type TProcedure = procedure(const messageText : String) of object;
然后有一个该类型的变量,decodeProcedure : TProcedure;
它被分配到不同的地方。
当我停在断点上时,如何查看变量指向的过程?
如果我Debug/evaluate
或add watch
我收到错误E2035 Not enough actual parameters
(德尔福 XE 2)
您可以使用 @ 运算符评估 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
表达式添加到观察列表以获得相同的结果