El siguiente código (construido solo para demostrar el problema) compila y funciona en Delphi 2010. En Delphi 2009, el compilador falla con "E2035 No hay suficientes parámetros reales".Casting procedimientos anónimos en 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.
He encontrado solo un hack muy feo para evitar el problema (a: TProc absolute b). ¿Alguien sabe de una mejor solución para esta deficiencia del compilador?
[El campo TProc está realmente escondido dentro de un registro que puede almacenar varios códigos 'ejecutables' - TProcedure, TMethod y TProc. De fundición se utiliza para almacenar proc anónima específica en este campo]
Funciona en el caso de prueba, pero no en mi caso (un poco más complicado). Algo falla con el recuento de referencias de interfaz allí. Trataré de armar un caso de prueba más preciso. TProc es solo un área de almacenamiento para diferentes entidades de 'referencia al procedimiento', es por eso que lo estoy lanzando. Tal vez se podría hacer algo más agradable con los genéricos ... – gabr
@gabr: He actualizado mi publicación para proponer el hack # 3 (debería incrementar el contador de interfaz) – kludg
Gracias por todo su trabajo, pero acabo de encontrar una manera muy simple de resuelve este problema ... – gabr