AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

Ein Thema von Sequitar · begonnen am 13. Mai 2019 · letzter Beitrag vom 14. Mai 2019
Antwort Antwort
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#1

Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 13. Mai 2019, 01:42
Delphi-Quellcode:
Class Procedure Tfactory.Reg(Cl: TClass);
Begin
  If Assigned(Fclassregister)
  Then
  Begin
    Var
    Info := Ptypeinfo(Cl.ClassInfo);
    If Assigned(Info)
    Then
      Try
        Var
        Guid := Info^.TypeData.GUID;
        Fclassregister.Reg(Guid, Cl);
      Finally
      End;
  End;
End;

Tfactory.Reg([taclass<String, String>, taclass<String, Byte>,
  taclass<String, Integer>, taclass<Byte, Byte>]);
Hallo, ich bin eben auf ein Problem mit der eindeutigen idenzifizierung meiner registrierten Klassen gestoßen..
Bisher hab ich in einem dictionary die paare (guid,class)registriert, wobei die guid wie oben dargestellt erzeugt/abgefragt wurde.
Ich ging davon aus,die seien systemweit eindeutig und daher besser geeignet als irgendwelche selbst erstellten strings etc ?

nun habe ich den fall, dass ich mehrerere generische klassen registrieren - und auch wieder abfragen will, aber hier scheinen die klassen guids immer gleich zu sein? jedenfalls werden bereits bestehende registrierungen dabei vom neuen generischen typ überschrieben...pale:

wie kann ich nun auch solche generischen klassen eindeutig zuordnen. sonst hab ich bald chaos
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.003 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 13. Mai 2019, 09:22
Wie wird der Klasse eine GUID zugeordnet? (per Property, Annotation, Funktion...?)

Hat im Codebeispiel nur die generische "Basis"-Klasse taclass eine GUID?
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 13. Mai 2019, 09:48
Wie wird der Klasse eine GUID zugeordnet? (per Property, Annotation, Funktion...?)
Es handelt sich bei GUID um eine Funktion des Typs TTypeData aus System.TypInfo.

Ich ging davon aus,die seien systemweit eindeutig und daher besser geeignet als irgendwelche selbst erstellten strings etc ?
Die Dokumentation dazu ist etwas sparsam, aber die Implementation lässt schließen, daß nur für Interface-Typen ein brauchbarer Wert dabei herauskommt. Da es sich bei TTypData um einen varianten Record handelt, wird der Speicher für die GUID bei anderen Typen für andere Dinge verwendet. Deswegen steht da wohl immer irgendwas drin, aber nur bei Interface-Typen ist das wirklich eine GUID.

Deinen Ansatz kannst du also getrost in die Tonne treten - nicht nur bei generischen Klassen.
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
9.282 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 13. Mai 2019, 10:29
Du kannst die Registrierung über die PTypeInfo direkt machen. Da brauchst du keine GUID oder irgendetwas, der Pointer darauf reicht schon zur eindeutigen Identifizierung im Dictionary.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 14. Mai 2019, 02:18
Du kannst die Registrierung über die PTypeInfo direkt machen. Da brauchst du keine GUID oder irgendetwas, der Pointer darauf reicht schon zur eindeutigen Identifizierung im Dictionary.
Hm das wäre ja schön einfach. Ich werde das morgen mal testen. Vielen Dank

NB :ich brauche halt eine eindeutige - und am besten bereits automatisierte - Identifizierung, ohne dass ich jetzt ZB irgendwelche hash Funktionen dazugeben muss

Hält das auch bei generics Stand? Müsste ja eigentlich denn tbla<x> ist ja ein anderer Typ als tbla<y> soweit ich weiß... Also auch andere typinfo

Geändert von Sequitar (14. Mai 2019 um 02:36 Uhr)
  Mit Zitat antworten Zitat
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 14. Mai 2019, 02:28
Wie wird der Klasse eine GUID zugeordnet? (per Property, Annotation, Funktion...?)

Hat im Codebeispiel nur die generische "Basis"-Klasse taclass eine GUID?
Naja interfaces ordnet man ja gewöhnlich eine zu. Da ich bei PTypeInfo fündig geworden bin, nahm ich an dass klassen bereits eine von sich aus liefern würden.
Uwes Antwort dagegen schießt einen sinnvolle Verwendung jedoch aus, wenn das nur für Interfaces mit einer *echten * GUID hinterlegt ist
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.282 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Classen Typinfo GUID & Generics. Nicht eindeutig identifizierbar?

  Alt 14. Mai 2019, 03:43
Hält das auch bei generics Stand? Müsste ja eigentlich denn tbla<x> ist ja ein anderer Typ als tbla<y> soweit ich weiß... Also auch andere typinfo
Ja, genau.

Das funktioniert nur bei den diversen Typaliasen der einfachen Typen nicht. Zum Beispiel ist TDateTime ja eigentlich nur ein Fließkommawert und hat daher auch dessen Typinfo.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz