2017-02-20 1 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

일치하는 것을 확인합니다. 확장 RTTI를 사용하는 D2010 이상에서는 더 쉽게 할 수 있지만 표준 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. 
관련 문제