EL problema que tienes es la manera como defines tu variable de salida. Es erroneo hacer :
Código:
TMiEv = procedure (Sender: TObject; datos: array of variant) of object ;
debes definir la variable datos asi:
Código:
TMiEv = procedure (Sender: TObject; VAR datos: array of variant) of object ;
Y dentro de tu codigo, la puedes utilizar asi:
Código:
Procedure CalcularAlgo;
var vDatos:Array of Variant;
Begin
{.....Calculos.....}
if Se_cumplio_Condicion then
if assigned(FMiEv) then
begin
FMiEv(self, vDatos);
for i:= low(vDatos) to high(vDatos) do
{...haces lo que quieras....}
end;
end;
Ya lo probe y funciona asi, pero me pregunto: ¿para que utilizas este tipo de eventos?. Lo digo por que al principio me llamo la atencion un evento que devolviera valores de ese modo, y me hice la misma pregunta que Julià T.: "¿y como accedes?". Es una manera poco comun de definir un evento. (me parece)