Der folgende Code (nur zur Veranschaulichung des Problems erstellt) wird in Delphi 2010 kompiliert und funktioniert. In Delphi 2009 schlägt der Compiler mit "E2035 Nicht genug tatsächliche Parameter" fehl. (: TPROC absolute b a)Casting anonymer Prozeduren in 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.
Ich habe nur eine sehr hässliche Hack zu arbeiten, um das Problem zu finden. Kennt jemand eine bessere Problemumgehung für diesen Compiler-Mangel?
[TProc-Feld ist tatsächlich in einem Datensatz versteckt, der verschiedene 'ausführbare' Code speichern kann - TProcedure, TMethod und TProc. Gießen verwendet wird, bestimmte anonyme proc in dieses Feld zu speichern]
Es funktioniert im Testfall, aber nicht in meinem (etwas komplizierteren) Fall. Da läuft etwas schief mit der Schnittstellenreferenz. Ich werde versuchen, einen genaueren Testfall zusammenzustellen. TProc ist nur ein Speicherbereich für verschiedene 'Verweis auf Prozedur' Berechtigungen, deshalb bin ich Casting es. Vielleicht könnte etwas schöneres mit den Generika gemacht werden ... – gabr
@gabr: Ich habe meinen Beitrag aktualisiert, um Hack # 3 vorzuschlagen (sollte Interface ref counter inkrementieren) – kludg
Danke für all deine Arbeit, aber ich habe gerade einen wirklich einfachen Weg gefunden löse dieses Problem ... – gabr