2010-05-26 76 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

相關問題