AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Delphi-Coll unter XE2 oder neuer nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Coll unter XE2 oder neuer nutzen

Ein Thema von Dawn87 · begonnen am 6. Jun 2014 · letzter Beitrag vom 9. Jun 2014
Antwort Antwort
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Delphi-Coll unter XE2 oder neuer nutzen

  Alt 6. Jun 2014, 13:04
Hallo,

ich benutze in einem Projekt von mir die Delphi-Collections, (https://github.com/ghquant/delphi-coll) welche u.A. Erweiterungen für generische Listen, Dictionaries und auch MultiMaps mitbringen. Die Kompilierung des Source-Codes scheitert bei der Kompilierung mit XE2 und XE5 an Stellen in dem entweder ein TKey oder TValue-Wert nach TObject gecastet werden soll:

Delphi-Quellcode:
procedure TObjectDictionary<TKey, TValue>.HandleKeyRemoved(const AKey: TKey);
begin
  if FOwnsKeys then
    TObject(AKey).Free; // <-- E2089 Ungültige Typumwandlung
end;
Mit Delphi XE funktioniert das ganze so noch.

Da es offensichtlich keine neuere Version gibt, frage ich mich nun, wie dieser Fehler behoben werden kann, um diese Library zu XE2/XE5 kompatibel zu machen. Womöglich ist es auch zielführender eine andere Collection-Library zu verwenden, welche noch aktiv gepflegt wird. Im Spring-Framework sind ebenfalls Collections vorhanden, jedoch keine MultiMaps wenn ich das richtig sehe.

Was ich brauche, ist ein generisches TDictionary, welches mehrere Values pro Key verwalten kann. Dies kann (konnte) Delphi in der Vergangenheit leider nicht out-of-the-box.

Hat jemand einen Ratschlag für mich?

Grüße
Stefan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi-Coll unter XE2 oder neuer nutzen

  Alt 6. Jun 2014, 13:19
Mit DelphiXE6 geht es ohne Probleme.

Es scheint aber doch eine neuer Version zu geben

Delphi-Quellcode:
procedure TObjectDictionary<TKey, TValue>.HandleKeyRemoved(const AKey: TKey);
begin
  if FOwnsKeys then
    PObject(@AKey)^.Free;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi-Coll unter XE2 oder neuer nutzen

  Alt 6. Jun 2014, 14:14
Damit man im Generic die Typen problemlos entsprechend casten kann, muß der Typ als "Object" gekennzeichnet sein.

type TObjectDictionary<TKey: class; TValue> = ...
oder
type TObjectDictionary<TKey: TMyClass; TValue> = ...

Ansonsten kommt der "doofe" Code-Parser vom Compiler damit nicht klar.


Die andere Alternative ist leider, wie mkinzler schon zeigte, das brutale Umgehen der Typprüfung des Compilers.




Delphi macht derartige Typprüfungen leider schon in der generischen Deklaration, und nicht erst in der Ableitung.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Jun 2014 um 14:17 Uhr)
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Delphi-Coll unter XE2 oder neuer nutzen

  Alt 6. Jun 2014, 14:18
Besten Dank für Eure Antworten.

Es gibt tatsächlich eine neuere Version. Die habe ich ausgerechnet im Ursprungsbeitrag sogar verlinkt. Wenn man sich von der Website den MASTER-Branch holt, funktioniert es auch mit Delphi XE5.

Tatsächlich wird aber auch in der Version nicht die Variante, welche himitsu vorgeschlagen hat umgesetzt, sondern die Typprüfung wird umgangen.

Grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Delphi-Coll unter XE2 oder neuer nutzen

  Alt 6. Jun 2014, 15:38
Ich würde dir empfehlen, Spring4D zu nutzen. Das wird aktiv entwickelt (Delphi-Coll ist faktisch tot - Alex macht daran nix mehr).

Delphi-Coll hat einige eher ausgefallenere Collection Types, die Spring4D (noch) nicht hat. Wenn dir dort etwas fehlen sollte, Feedback ist gern willkommen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Delphi-Coll unter XE2 oder neuer nutzen

  Alt 7. Jun 2014, 14:54
Hallo Stevie,

auch Dir Danke ich für Deine Antwort.

Was die Collections betrifft, so hast Du ja einen ersten Vorschlag: "Multimaps". Fürs Erste muss ich erst einmal bei Delphi-Coll bleiben, aber ich werde den Aufwand für einen Umstieg demnächst mal genauer bewerten.

Spring4d bzw. Dependency Injection im Allgemeinen ist ein Thema mit dem ich mich neben dem Berufsalltag zurzeit auseinandersetze. Diesbezüglich kommen sicher bald einige Fragen auf das Forum zu. Bei der Verwendung von DI fällt einem erst einmal so auf, was man sich in der Vergangenheit durch "suboptimale" Programmstukturierung verbaut hat.

Beste Grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Delphi-Coll unter XE2 oder neuer nutzen

  Alt 9. Jun 2014, 14:51
Was die Collections betrifft, so hast Du ja einen ersten Vorschlag: "Multimaps". Fürs Erste muss ich erst einmal bei Delphi-Coll bleiben, aber ich werde den Aufwand für einen Umstieg demnächst mal genauer bewerten.
Multimaps hab ich gestern eingebaut.

Spring4d bzw. Dependency Injection im Allgemeinen ist ein Thema mit dem ich mich neben dem Berufsalltag zurzeit auseinandersetze. Diesbezüglich kommen sicher bald einige Fragen auf das Forum zu. Bei der Verwendung von DI fällt einem erst einmal so auf, was man sich in der Vergangenheit durch "suboptimale" Programmstukturierung verbaut hat.
Ja, das sind immer diese Aha-Momente, wo einem dann schlagartig klar wird, warum manche immer von Design Prinzipien und so rumlabern
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 23:39 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