次のコード(問題を示すためだけに作成されたもの)は、Delphi 2010 でコンパイルおよび動作します。Delphi 2009 では、コンパイラは「E2035 実際のパラメータが不足しています」で失敗します。
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.
この問題を回避するための非常に醜いハックを 1 つだけ見つけました (a: TProc absolute b)。このコンパイラの欠陥に対するより良い回避策を知っている人はいますか?
[TProc フィールドは実際には、さまざまな「実行可能」コード (TProcedure、TMethod、および TProc) を格納できるレコード内に隠されています。キャストは、特定の匿名プロシージャをこのフィールドに格納するために使用されます。]