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

に一致するものを確認してください。 Extended RTTIを使用するD2010以降では簡単ですが、標準RTTIでは[手動で実行する]必要があります(http://stackoverflow.com/questions/3107583/)。 –

答えて

3

EXTIですべての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. 
関連する問題