AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Generische Interface-GUIDs

Ein Thema von Dennis07 · begonnen am 12. Sep 2022 · letzter Beitrag vom 15. Jun 2023
Antwort Antwort
Seite 1 von 2  1 2      
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#1

AW: Generische Interface-GUIDs

  Alt 12. Sep 2022, 16:47
Berücksichtig man den Fakt, dass in Delphi zwei an verschiedenen Stellen deklarierte TList<string> auch formell zwei unterschiedliche Typen sind
Jo, aber das ist ja eine Klasse. Klassen identifizieren sich ja über die Klassenreferenz, Interfaces hingegen über ihre GUID. Wenn du zweimal das gleiche Interface mit der selben GUID hast, dann ist es auch das selbe. Das ist ja gerade der Sinn eines Interfaces, sonst bräuchte man die ja nicht (abgesehen von ARC und Mehrfachableitung natürlich).

Mach halt einfach kein supports auf nen generisches interface
Ja okay, und wie soll man das sonst machen? Außerdem löst es das Problem auch nicht, dass die Adressen in der VMT auf die selbe Stelle zeigen.

Und bei jeden Full Build kommt eine andere GUID bei raus?
Ja entweder das, oder sie werden in der DPROJ gecached, keine Ahnung. Da man auf Interfaces im Code aber eh nicht direkt über ein TGUID-Objekt, sondern in der Regel über den Interface-Namen zugreifen sollte, spielt das in 99,9% der Fälle keine Rolle. Für den Rest der Fälle muss man das dann halt konventionell lösen.

utomatisch generierte GUIDs würden jedenfalls nur einen Teil der Probleme lösen. Ich hatte das Thema GUIDs bei generischen Interfaces auch schon, wenn auch mit anderem Hintergrund. Mir fällt aber schlicht keine wirklich sinnvolle Lösung dafür ein. Deshalb hatte ich dazu auch keinen Featurerequest geschrieben bzw. erst einmal danach gesucht.
Jo, das ist richtig. Hast du einen Link?

Es könnte auch sein, dass garkeine GUID generiert wird und die einfach nur 0000-000-00000-0000.... ist

Mir war so, als wenn der Compiler bei Interfaces "ohne" GUID eh gewisse Dinge verbietet / nicht kompilert, wie z.B. die Verwendung von IS und AS.
Somit wäre dabei die GUID dann eh egal, wenn sie nie verwendet würde.
Das ist richtig, du kannst den Interfacetypen nicht direkt als Bezeichner übergeben, falls du keine GUID definiert hast. Außerdem funktioniert "as" nicht.
Genau deshalb sind GUIDs ja so wichtig.
Dennis

Geändert von Dennis07 (12. Sep 2022 um 17:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: Generische Interface-GUIDs

  Alt 12. Sep 2022, 17:04
Jo, das ist richtig. Hast du einen Link?
Ich weiß nicht, ob es einen solchen Featurerequest schon gibt. Aber ich wollte darauf hinaus, dass du ansonsten einen erstellen musst, damit es eine Chance auf Umsetzung gibt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#3

AW: Generische Interface-GUIDs

  Alt 12. Sep 2022, 17:11
Oh ja, ich habe das k vor dem einen überlesen. Wird Zeit den Kopf zu lüften...
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.751 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generische Interface-GUIDs

  Alt 12. Sep 2022, 17:18
Delphi-Quellcode:
type
  IGenItf<T> = geninterface
    // Keine GUID hier (oder doch, aber egal)
    function Foo: T;
    procedure Poo;
  end;

type
  IIntItf = interface(IGenItf<Integer>)
    ['{123.......}']
  end;
  IStrItf = interface(IGenItf<String>)
    ['{456.......}']
  end;

  TImplObject = class(TInterfacedObject, IIntItf, IStrIntf)
    ...
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#5

AW: Generische Interface-GUIDs

  Alt 12. Sep 2022, 22:22
Wenn wir hier schon bei Wünsch dir was sind, dann wäre dies hier etwas weniger invasiv:
Delphi-Quellcode:
type
  IGenItf<T> = interface
    ['<AutoGUID>']
    function Foo: T;
    procedure Poo;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.751 Beiträge
 
Delphi 12 Athens
 
#6

AW: Generische Interface-GUIDs

  Alt 12. Sep 2022, 23:13
Rein syntaktisch ist das doch eigentlich falsch.

Attribute stehen doch vor dem, was sie beschreiben und (leider) nicht dahinter.


Delphi-Quellcode:
type
  [AutoGUID]
  IGenItf<T> = interface
    function Foo: T;
    procedure Poo;
  end;

  [GUID('{00000000-0000-0000-0000-000000000000}')]
  IGenItf<T> = interface
    function Foo: T;
    procedure Poo;
  end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.522 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Generische Interface-GUIDs

  Alt 13. Sep 2022, 06:40
Wenn wir hier schon bei Wünsch dir was sind, dann wäre dies hier etwas weniger invasiv:
Delphi-Quellcode:
type
  IGenItf<T> = interface
    ['<AutoGUID>']
    function Foo: T;
    procedure Poo;
end;
Hm, wäre es nicht noch weniger invasiv, wenn Delphi immer eine intern automatisch macht, wenn man nichts angibt? (Ggf. nur bei Generics)
Oder gibt es Fälle wo man wirklich keine haben will?
  Mit Zitat antworten Zitat
TiGü

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

AW: Generische Interface-GUIDs

  Alt 13. Sep 2022, 08:36
Na viel Spaß sobald der Erste versucht sich das über Modulgrenzen (EXE, DLL) hinweg in andere Sprachen/Framework zu übergeben und die Gegenseite eher nicht so glücklich mit dynamischen GUIDs ist.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#9

AW: Generische Interface-GUIDs

  Alt 13. Sep 2022, 09:17
Na viel Spaß sobald der Erste versucht sich das über Modulgrenzen (EXE, DLL) hinweg in andere Sprachen/Framework zu übergeben und die Gegenseite eher nicht so glücklich mit dynamischen GUIDs ist.
Deswegen sollen die ja auch nur optional sein. Insbesondere da, wo bisher gar keine stehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.115 Beiträge
 
Delphi 12 Athens
 
#10

AW: Generische Interface-GUIDs

  Alt 13. Sep 2022, 11:15
Na viel Spaß sobald der Erste versucht sich das über Modulgrenzen (EXE, DLL) hinweg in andere Sprachen/Framework zu übergeben und die Gegenseite eher nicht so glücklich mit dynamischen GUIDs ist.
Die andere Seite merkt ja nichts von dynamischen GUIDs, aber egal ob bei vorkompilierten Units in der gleichen ausführbaren Datei oder DLLs oder Packages:
Solange nicht klar definiert ist, welche GUID zu welchem konkreten Typ dynamisch zugeordnet wird, klappt das ganze nicht.

Deshalb könnte ich mir nur eine im Projekt gepflegte Tabelle oder etwas ähnliches vorstellen, ähnlich dem TLB-Editor, mit speziellen Textdateien, die die Zuordnungen anhand des voll qualifizierten Typnamens, sprich inkl. Unitname, enthalten. Ich kann mir aber ehrlich gesagt nicht so recht vorstellen, dass Embarcadero ein solches Feature implementiert, wenn es nicht wirklich viele, ganz viele, Votes für einen entsprechenden Featurerequest gibt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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