Самый простой на мой взгляд способ вызвать метод объекта по имени -
использование методов GetMethodInfo/ObjectInvoke модуля ObjAuto. Доступные
методы нужно заключить в директивы {$METHODINFO } чтобы компилятор
включил в код информацию о методах, необходимую для вызова GetMethodInfo.
Пример использования:
pascal
{$APPTYPE CONSOLE}uses ObjAuto;
type
TMyClass = class{$METHODINFO ON}publicfunction test4(N:integer; S:String):String;
end;
{$METHODINFO OFF}function TMyClass.test4(N:integer; S:String):String;
begin
Writeln(S);
Writeln(N);
result := 'test string';
end;
var C:TMyClass;
M:PMethodInfoHeader;
V:Variant;
begin
C := TMyClass.Create;
try
M := GetMethodInfo(C, 'test4');
if M <> nil then begin
V := ObjectInvoke(C, M, [1, 2], [55, 'string']);
writeln(V);
end;
finally
C.Free;
end;
readln;
end.