Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.034 Beiträge
 
Delphi 12 Athens
 
#16

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 19:51
Es ist zwar schon mehrfach angesprochen worden, aber hier mal ein konkretes Beispiel. Der Einfachheit halber geben die Funktionen lediglich einen Integer-Wert zurück:

Delphi-Quellcode:
type
  TMyFunc = function: Integer of object;

function CallObjectFunction(Instance: TObject; const FuncName: string): Integer;
var
  Func: TMyFunc;
  MVar: TMethod;
begin
  MVar.Data := Instance;
  MVar.Code := Instance.MethodAddress(FuncName);
  Assert(Assigned(MVar.Code));
  Func := TMyFunc(MVar);
  result := Func();
end;

type
{$METHODINFO ON}  // falls das nicht geht, müssen die Methoden published sein!
  TTestObject = class
  public
    function Test1: Integer;
    function Test2: Integer;
  end;

function TTestObject.Test1: Integer;
begin
  result := 42;
end;

function TTestObject.Test2: Integer;
begin
  result := 4711;
end;

procedure TestIt;
var
  res: Integer;
  TestObject: TTestObject;
begin
  TestObject := TTestObject.Create;
  try
    res := CallObjectFunction(TestObject, 'Test1');
    Assert(res = 42);
    res := CallObjectFunction(TestObject, 'Test2');
    Assert(res = 4711);
  finally
    TestObject.Free;
  end;
end;
Uwe Raabe
  Mit Zitat antworten Zitat