以下代码(仅用于演示问题)在 Delphi 2010 中编译和工作。在 Delphi 2009 中,编译器失败并显示“E2035 Not enough actual parameters”。
program Project50;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyProc = reference to procedure(param: integer);
var
a: TProc;
b: TMyProc;
begin
b := procedure (param: integer)
begin
end;
a := TProc(b); // <-- [DCC Error] Project50.dpr(19): E2035 Not enough actual parameters
end.
我发现只有一个非常丑陋的黑客可以解决这个问题(a:TProc absolute b)。有没有人知道这个编译器缺陷的更好的解决方法?
[TProc 字段实际上隐藏在可以存储各种“可执行”代码的记录中 - TProcedure、TMethod 和 TProc。Casting 用于将特定的匿名 proc 存储到此字段中。]