2017-02-20 13 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 и более поздних версиях с помощью расширенного RTTI, но он должен быть выполнен [вручную] (http://stackoverflow.com/questions/3107583/) в стандартном RTTI. –

ответ

3

Вам необходимо выполнить поиск по всем RTTI в EXE. Для Delphi 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.