delphirttitypeinfo

Is it possible to retrieve TypeInfo from a string using the new Delphi's RTTI library?


I'm wondering if this is possible. I want to get the TypeInfo, passing the type's name as a string.

Something like this:

type
  TSomeValues = record
    ValueOne: Integer;
    ValueTwo: string;
  end;


function ReturnTypeInfo(aTypeName: string): TypeInfo;
begin
    // that's is the issue
end;

procedure Button1Click(Sender: TObject);
var
  _TypeInfo: TypeInfo;
begin
  _TypeInfo := ReturnTypeInfo('TSomeValues');
end;

Solution

  • Use the TRttiContext.FindType() method and TRttiType.Handle property, eg:

    uses
      ..., System.TypInfo, System.Rtti;
    
    function ReturnTypeInfo(aTypeName: string): PTypeInfo;
    var
      Ctx: TRttiContext;
      Typ: TRttiType;
    begin
      Typ := Ctx.FindType(aTypeName);
      if Typ <> nil then
        Result := Typ.Handle
      else
        Result := nil;
    end;
    
    ...
    
    type
      TSomeValues = record
        ValueOne: Integer;
        ValueTwo: string;
      end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      _TypeInfo: PTypeInfo;
    begin
      _TypeInfo := ReturnTypeInfo('Unit1.TSomeValues');
      ...
    end;