Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: TypeInfo über IID oder Klasse (und RTTI)

  Alt 21. Jul 2005, 15:50
nein über diesen Weg geht das leider nicht da der Compiler in den RTTI einer Klasse über die PInterfaceTable nur die durch die Klasse implementierten Interface die Infos ablegt. Der RTTI Record über ein IInterface ist dabei was komplett anderes und das einzigst Gemeinsamme in beiden RTTI-Records ist die GUID.

Ich habe hier im Forum mal einen "inoffiziellen" Weg gepostet, samt Source, wie man aber über die TypInfos eines kompletten Modules iterieren kann. Mit dieser Methode wäre es nun möglich eine Funktion zu coden die zu einer GUID die TypeInfo dieses IInterfaces ermittelt.

Allerdings dürfte das garnicht notwendig sein

Delphi-Quellcode:
function HasInterface(AClass: TClass; ATypeInfo: PTypeInfo): Boolean;
begin
  Result := (ATypeInfo <> nil) and (ATypeInfo.Kind = tkInterface) and
            (AClass <> nil) and (AClass.GetInterfaceEntry(GetTypData(ATypeInfo).GUID) <> nil);
end;


procedure Test;
begin
  if HasInterface(TypeInfo(IMyInterface), TMyClass) then ...
end;
Wie man aber unschwer erkennen kann ist dieser Weg im Grunde "doppelgemoppelt" denn so ginge es viel einfacher

Delphi-Quellcode:
procedure Test;
begin
  if TMyClass.GetInterfaceEntry(IMyInterface) <> nil then
    with TypeInfo(IMyInterface) do
end;
Da die "function TypeInfo()" ein Compiler Magic ist, also schon zur Kompilierungszeit wird TypeInfo() aufgelösst und im fertigen Code steht nur noch ein "Zeiger ins Codesegment", gibt es eh keinen Weg die ganze Sache dynamisch zur Laufzeit zu machen.

Gruß Hagen
  Mit Zitat antworten Zitat