2012-04-25 39 views

回答

6
function GetInterfaceTypeInfo(const GUID: TGUID): PTypeInfo; 
var 
    Ctx: TRttiContext; 
    AType: TRttiType; 
begin 
    Result := nil; 
    Ctx := TRttiContext.Create; 
    try 
    for AType in Ctx.GetTypes do 
     if (AType.TypeKind = tkInterface) and IsEqualGUID(GetTypeData(AType.Handle)^.Guid, GUID) then 
     begin 
     Result := AType.Handle; 
     Break; 
     end; 
    finally 
    Ctx.Free; 
    end; 
end; 
+0

它的工作原理!如果没有人发布更快的实现(不需要遍历所有类型),我会接受它。也许它可以完成? – 2012-04-25 14:09:07

+1

例如,您可以保留自己的(较小)类型信息列表,并在列表中手动注册界面类型信息。 – 2012-04-25 14:12:22