Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi doppelte Interface-GUID´s? (https://www.delphipraxis.net/180729-doppelte-interface-guid%B4s.html)

stahli 12. Jun 2014 21:24

doppelte Interface-GUID´s?
 
Wenn man nicht aufpasst und z.B. durch C&P in einem Projekt oder gar Unit zwei mal die gleiche Interface-GUID verwendet bemeckert das der Compiler offenbar nicht.
Oder kann man das mögliche Problem irgendwie erkennen?

Delphi-Quellcode:
...
  IA = interface
    ['{60A622F7-4E7F-4A62-84C5-603F410A087A}']
    ...
  end;

  IB = interface
    ['{60A622F7-4E7F-4A62-84C5-603F410A087A}']
    ...
  end;

himitsu 12. Jun 2014 23:16

AW: doppelte Interface-GUID´s?
 
Gut, daß Delphi das nicht merkt, sonnst könntest du die OLE- und die ActiveX-Units nicht gleichzeitig in einem Projekt nutzen, denn dort sind viele Interfaces doppelt drin. :roll:


Nja, solange die beiden Interfaces nicht im selben Objekt supportet werden sollen, oder sie an gemeinsamer Stelle für unterschiedliche Funktionen stehen, gibt es eigentlich kein Problem.

Was passiert denn bei
Delphi-Quellcode:
TMyClass = class(TInterfacedObject, IA, IB)
?

Neutral General 13. Jun 2014 12:32

AW: doppelte Interface-GUID´s?
 
Zitat:

Zitat von himitsu (Beitrag 1262106)
Was passiert denn bei
Delphi-Quellcode:
TMyClass = class(TInterfacedObject, IA, IB)
?

Habs grad ausprobiert. Funktioniert ohne Probleme.

himitsu 13. Jun 2014 12:46

AW: doppelte Interface-GUID´s?
 
Und raus bekommt man dann "vermutlich" immer nur IA (das erste), selbst wenn man auf IB abfragt (Supports).

Wobei mich mal interessieren würde, ob Delphi die "identischen" Interfaces (GUIDs) dann wegoptimiert, oder ob die dann doppelt drin stehen.

Vielleicht auch mal im Vergleich zu
Delphi-Quellcode:
TMyClassA = class(TInterfacedObject, IA)
end;
TMyClassB = class(TMyClassA, IB) // oder nochmals class(TMyClassA, IA)
end;

Uwe Raabe 13. Jun 2014 12:56

AW: doppelte Interface-GUID´s?
 
Zitat:

Zitat von himitsu (Beitrag 1262198)
Und raus bekommt man dann "vermutlich" immer nur IA (das erste), selbst wenn man auf IB abfragt (Supports).

Ich habe noch keine Regel entdeckt, welches Interface bei Supports (nur dort wirkt sich die doppelte GUID wirklich aus) zurückgegeben wird. Solange IA und IB von der Deklaration her kompatibel sind, macht das wohl keine Probleme - andernfalls schon. Das ist dann ähnlich gefährlich wie ein Hardcast.

Direkte Zuweisungen zu Interface-Variablen des einen oder andere Typs werden aber korrekt aufgelöst. Da scheint die GUID nicht zu interessieren.

himitsu 13. Jun 2014 13:14

AW: doppelte Interface-GUID´s?
 
Bei der Zuweisung hat Borland halt nichts "Spezielles" eingebaut und geht da vermutlich rein auf die RTTI/TypeInfo.

Ansonsten müssten die ja den Typ-Namen ignorieren, die GUID vergleichen und eigentlich auch noch die Definitionen der Methoden (dabei wieder die Namen der Methoden und Parameter ignorieren).


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz