Показать сообщение отдельно
  #4  
Старый 18.02.2012, 19:57
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию ObjectInvoke

Как вариант:
Код:
uses
  ObjAuto,

type
   TMyClass = class
   public
      {$METHODINFO ON}
      function test4(N:integer; S:String):String;
      procedure test5;
      {$METHODINFO OFF}
   published
   end;

implementation

function TMyClass.test4(N:integer; S:String):String;
begin
   result := 'test string: '+S+' ('+IntToStr(N)+')';
end;
procedure TMyClass.test5;
begin
  ShowMessage(Self.ClassName);
end;


procedure TForm1.SpeedButton1Click(Sender: TObject);
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']);
      ShowMessage(trim(V));
   end
   else begin
      ShowMessage('GetMethodInfo (test4):  Error');
   end;
   M := GetMethodInfo(C, 'test5');
   if M <> nil then begin
      ObjectInvoke(C, M, [], []);
   end
   else begin
      ShowMessage('GetMethodInfo (test5):  Error');
   end;
  finally
   C.Free;
  end;
end;
Ответить с цитированием