How to get/create anonymous method from TRttiMethod?

delphi, delphi-xe, rtti

Solution

If you really want an anonymous method, then make an anonymous method:

Result := procedure
          begin
            RttiMethod.Invoke(Self, []);
          end;

You can also construct a simple method pointer:

var
  Method: procedure of object;

TMethod(Method).Code := RttiMethod.CodeAddress;
TMethod(Method).Data := Self;
Result := Method;

The most direct way of course doesn't use RTTI at all:

Result := Foo;

Problem

I want to handle a `TRttiMethod` as anonymous method. How could I do this? Here is a simplified example of how I wish things to work: Interface: ``` TMyClass = class public // this method will be acquired via Rtti procedure Foo; // this method shall return above Foo as anonymous method function GetMethodAsAnonymous: TProc; end; ``` Implementation: ``` function TMyClass.GetMethodAsAnonymous: TProc; var Ctx: TRttiContext; RttiType: TRttiType; RttiMethod: TRttiMethod; begin Ctx := TRttiContext.Create; try RttiType := Ctx.GetType(Self.ClassType); RttiMethod := RttiType.GetMethod('Foo'); Result := ??????; // <-- I want to put RttiMethod here - but how? finally Ctx.Free; end; end; ```

Original source