2010-05-26 13 views
5

Probablemente sea un "no", pero ¿hay alguna manera de usar el RTTI de Delphi, ya sea de la vieja escuela o del RTTI ampliado de 2010, para pasar una cadena que contenga el nombre de un tipo, específicamente el nombre de un tipo enumerado, y me da el PTypeInfo para ese tipo? He revisado RTTI.pas y TypInfo.pas y no veo ninguna función que pueda hacer eso, pero podría haberme perdido algo.¿Puedo obtener un PTypeInfo de una cadena?

Lo que estoy buscando:

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

O algo por el estilo. La cosa es que el nombre del tipo enumerado se pasará; no se sabría en tiempo de compilación.

Respuesta

10

Lo siguiente debería funcionar con el nombre calificado.

Nombre calificado es: 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

Eso era exactamente lo que estoy buscando. ¡Gracias! –

+0

¿Por qué esta función no funciona para enums? –

+0

Debería funcionar para el nombre de tipo enum. Que es diferente a los nombres de elementos de enumeración. –

Cuestiones relacionadas