以下代碼(僅用於演示此問題)編譯並在Delphi 2010中運行。在Delphi 2009中,編譯器因「E2035實際參數不足」而失敗。在Delphi 2009中投射匿名程序
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絕對b)。有誰知道這個編譯器缺陷的更好的解決方法嗎?
[TProc字段實際上隱藏在可存儲各種'可執行'代碼的記錄中 - TProcedure,TMethod和TProc。鑄造用於特定匿名PROC存儲到這個領域]
它適用於測試案例,但不適用於我的(稍微複雜的)案例。接口引用計數出現問題。我會盡量整理一個更準確的測試用例。 TProc只是不同的'參考程序'實體的存儲區域,這就是爲什麼我要投它。也許更好的東西可以用泛型... – gabr 2010-02-22 07:01:49
@gabr:我已經更新了我的帖子,建議破解#3(應該增加界面ref counter) – kludg 2010-02-22 08:21:13
感謝您的所有工作,但我剛剛找到了一種非常簡單的方法解決這個問題... – gabr 2010-02-22 08:42:51