2010-05-26 9 views
5

Cela va probablement être un "non", mais est-il possible d'utiliser le RTTI de Delphi, soit old-school ou le RTTI étendu 2010, pour transmettre une chaîne contenant le nom d'un type, en particulier le nom de un type énuméré, et il me donne le PTypeInfo pour ce type? J'ai regardé à travers RTTI.pas et TypInfo.pas et je ne vois aucune fonction qui ferait cela, mais j'ai peut-être manqué quelque chose.Puis-je obtenir un PTypeInfo à partir d'une chaîne?

Ce que je suis à la recherche:

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

Ou quelque chose comme ça. La chose est, le nom du type énuméré serait passé dedans; il ne serait pas connu au moment de la compilation.

Répondre

10

Ce qui suit devrait fonctionner avec le nom qualifié.

Nom qualifié est: 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

C'était exactement ce que je cherche. Merci! –

+0

Pourquoi cette fonction ne fonctionne pas pour enums? –

+0

Il devrait fonctionner pour le nom de type enum. Ce qui est différent des noms d'éléments d'énumération. –