2010-05-26 84 views
5

这可能将是一个“不”,但有什么办法,我可以使用Delphi的RTTI,无论是老派或2010扩展RTTI,在包含类型的名称的字符串传递的具体名称一个枚举类型,并让它给我这种类型的PTypeInfo?我查看了RTTI.pas和TypInfo.pas,我没有看到任何可以做到的功能,但我可能错过了一些东西。我可以从字符串中获得一个PTypeInfo吗?

我在找什么:

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

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

回答

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; 
+0

这正是我要找的。谢谢! – 2010-05-26 18:02:13

+0

为什么这个函数不适用于枚举? – 2017-11-07 16:17:10

+0

它应该用于枚举类型名称。这与枚举元素名称不同。 – 2017-11-08 01:39:14

相关问题