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