Un pequeño apunte. De acuerdo con Rudorf MethodAddress funciona para métodos públicos o publicados. Sin embargo una pequeña prueba me mostró lo contrario:
Código:
TFoo = class
published
function Doo: Integer;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
Foo: TFoo;
begin
Foo := TFoo.Create;
if Foo.MethodAddress('Doo') <> nil then
Beep;
Foo.Free;
end;
El botón hace beep pero se queda mudo si cambiamos
published por
public
En el primer caso, por cierto, noten que no hay directiva $M de forma que se compila con el default {$M-} de manera que no se genera RTTI (como se comprueba viendo que Foo.ClassInfo es nil) lo cual demuestra que MethodAddress funciona
sin usar RTTI.
// Saludos