5

这可能是“否”,但是有什么方法可以使用 Delphi 的 RTTI,无论是老式的还是 2010 年扩展的 RTTI,来传递一个包含类型名称的字符串,特别是枚举的名称类型,并让它给我该类型的 PTypeInfo 吗?我查看了 RTTI.pas 和 TypInfo.pas,但没有看到任何可以做到这一点的函数,但我可能错过了一些东西。

我在找什么:

var
  info: PTypeInfo;
begin
  info := GetTypeInfoFromName('TComponentStyle');
end;

或类似的东西。事情是,枚举类型的名称将被传入;在编译时不会知道。

4

1 回答 1

10

以下内容应与限定名称一起使用。

合格名称是:UnitName.TypeName

type
 ETypeNotFound = class(Exception);

function GetTypeInfoFromName(aTypeName : String) : pTypeInfo;
var
 C : TRttiContext;
 T : TRttiType;
begin
 T := C.FindType(aTypeName);
 if Not Assigned(T) then
    raise ETypeNotFound.CreateFmt('Type %s is not found',[aTypeName]);

 result := T.Handle;
end;
于 2010-05-26T17:53:56.490 回答