我已经死了
type TProcedure = procedure(const messageText : String) of object;
Run Code Online (Sandbox Code Playgroud)
然后有一个decodeProcedure : TProcedure; 在不同地方分配的那种类型的变量.
当我在一个breakpint停止时,我怎么能看到变量指向哪个程序?
如果我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.
Run Code Online (Sandbox Code Playgroud)
这是一个示例IDE屏幕截图

如您所见,local variables窗口显示了decodeprocedure指向该TFooClass.Bar方法的内容.
更新
您还可以将Self表达式添加到监视列表以获得相同的结果

| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |