Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TGUID von Interface-Instanz herausfinden

  Alt 8. Mai 2014, 09:01
Vielen Dank für den bisherigen Input.
Ich ahnte schon, dass es unmöglich und/oder kompliziert sein würde.

Das klingt ja alles sehr kompliziert. Ginge es nicht so wie Der Schöne Günther bereits schrieb:
Delphi-Quellcode:
function TMyList.GetInterfaceGUID(const AInterfaceInstance : IMainInterface) : TGUID;
begin
  result := GetTypeData(TypeInfo(AInterfaceInstance))^.Guid;
end;
Leider zickt da mein XE3: [dcc32 Error] List.pas(51): E2133 TYPEINFO standard function expects a type identifier

Sowas hatte ich nämlich auch schon im Sinn und bin an ähnlichen Fehlermeldungen gescheitert.

@Günther: Wenn man eh den genauen Typ weiß, braucht man auch keine RTTI:
Delphi-Quellcode:
var
  InterfaceGUID : TGUID;
begin
  InterfaceGUID := GetTypeData(TypeInfo(IMainInterface))^.Guid;
  InterfaceGUID := IMainInterface;

Man muss dazu sagen, dass ich von einer C++-DLL diese Instanzen erhalte, es sind also leider keine Delphi-Objekte.
Ich weiß halt nur, dass diese Instanzen das IMainInterface implementieren.
Nun gilt es herauszufinden, welches andere Interface sie noch unterstützen, um ihre Aufgabe zweifelsfrei zu identifizieren (Child1 bis Child3 im Beispiel).

Oder um es etwas konkreter zu machen:
Delphi-Quellcode:
  ICanDrive = interface(IUnknown)
    [SID_DRIVE]
  end;

  IAmACar = interface(IUnknown)
    [SID_CAR]
  end;

  IAmATruck = interface(IUnknown)
    [SID_TRUCK]
  end;

  IAmAMoped = interface(IUnknown)
    [SID_MOPED]
  end;
Ich erhalte ICanDrive-Instanzen und muss schauen ob es nun ein Auto, LKW oder Mofa ist.
Mit if-else-Supports-Check gehts es zwar auch, ist aber halt sehr wartungsanfällig und fehlerbehaftet.

Geändert von TiGü ( 8. Mai 2014 um 11:01 Uhr)
  Mit Zitat antworten Zitat