2017-02-20 33 views
2

如何從GUID獲取類型信息?如何從TGUID獲取界面類型信息?

procedure MyProcedure(const InterfaceId: TGuid); 
var 
    MyTypeInfo: PTypeInfo; 
begin 
    MyTypeInfo := TypeInfo(InterfaceId); //E2133 TYPEINFO standard function expects a type identifier 
    ... 
end; 
+0

您可以枚舉所有的接口使用RTTI併爲您匹配您的GUID –

+0

這正是你必須做什麼的人。在D2010中使用Extended RTTI更容易,但必須在標準RTTI中手動完成(http://stackoverflow.com/questions/3107583/)。 –

回答

3

您必須搜索EXE中的所有RTTI。 2010年德爾福及以上:

unit RTTI.Utilities; 

interface 

uses System.TypInfo; 

function InterfaceTypeInfoOfGUID(const AGUID : TGUID) : PTypeInfo; 

implementation 

uses System.RTTI; 

function InterfaceTypeInfoOfGUID(const AGUID : TGUID) : PTypeInfo; 

var 
    Context : TRttiContext; 
    ItemType : TRttiType; 

begin 
    for ItemType in Context.GetTypes do 
     begin 
     if ItemType is TRTTIInterfaceType then 
      begin 
       if TRTTIInterfaceType(ItemType).GUID = AGUID then 
        exit(TRTTIInterfaceType(ItemType).Handle); 
      end 
     end; 
    Result := nil; 
end; 

end.