Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Units mit gleichem Namen (System.Hash und Hash) (https://www.delphipraxis.net/190245-units-mit-gleichem-namen-system-hash-und-hash.html)

gammatester 16. Sep 2016 10:51

Units mit gleichem Namen (System.Hash und Hash)
 
Moin,

Seit XE8 gibt es eine Unit "System.Hash". Ich habe jetzt ein paar Berichte, daß meine Opensource Unit Hash (die seit über 13 Jahren im Einsatz ist und ständig weiterentwickelt wird) nicht erfolgreich benutzt werden kann (zB Fehler E2003 Undeclared identifier: THashContext).

Da ich selbst nur bis XE4 teste, kann ich das nicht nachvollziehen. Aber: Es sollte doch eine Möglichkeit geben, die Unit Hash ohne "System" Namespace zu benutzen eventuell mit

Delphi-Quellcode:
uses System.Hash, Hash, ...;


oder kann man die Suchreihenfolge irgendwie anders festlegen (wenn ja wie und wo)?

Die letzte Möglichkeit, meine Unit umzubenennen oder gar mit Namespace zu verzieren, möchte ich vermeiden, weil das wiederum das Kompilieren vieler vorhandener Programme (die ältere Delphis, Free Pascal, VirtualPascal benutzen) unmöglich macht.

Also zusammenfassende Frage: Wie kann man eine eigene Unit Hash mit System.Hash zusammen benutzen?

Gruß Gammatester

Uwe Raabe 16. Sep 2016 11:33

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Zitat:

Zitat von gammatester (Beitrag 1347803)
Also zusammenfassende Frage: Wie kann man eine eigene Unit Hash mit System.Hash zusammen benutzen?

In dem man in den Projektoptionen die Unit-Gültigkeitsbereichsnamen löscht.

Das kann allerdings wieder zu anderen Problemen führen. Wenn z.B. deine Unit Hash die System-Unit SysUtils verwendet, dann muss diese als System.SysUtils ausgeschrieben werden, da sie ohne die besagten Gültigkeitsbereichsnamen sonst nicht gefunden wird. Das kann übrigens auch für andere Bibliotheken gelten, die diese Gültigkeitsbereichsnamen voraussetzen.

jaenicke 16. Sep 2016 11:41

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Solche sehr allgemeinen Unitnamen sind eben ungünstig.

Einzige Möglichkeit wäre den Namespace System im Projekt zu entfernen. Aber erstens geht das auch nur manuell und ist bei jedem Projekt notwendig und zweitens macht es in der Regel keinen Sinn. Da ist die Umbenennung der Unit einfacher.

Benedikt Magnus 16. Sep 2016 12:02

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Und wenn du die Unit nur für die entsprechend betroffenen Versionen umbenennst? Oder eine Legacy Version anbietest?

gammatester 16. Sep 2016 12:44

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1347810)
In dem man in den Projektoptionen die Unit-Gültigkeitsbereichsnamen löscht.

Heißt das, daß in dem Project dann alle Namespace-Prefixes nicht mehr verwendet werden (können), außer System also auch VCL, Winapi etc?

Zitat:

Zitat von Uwe Raabe (Beitrag 1347810)
Wenn z.B. deine Unit Hash die System-Unit SysUtils verwendet, dann muss diese als System.SysUtils ausgeschrieben werden, da sie ohne die besagten Gültigkeitsbereichsnamen sonst nicht gefunden wird.

Das sollte kein Problem sein, da mein Hash nur eine eigene Unit BTypes benutzt (für Typdefinitionen), BTypes selbst beutzt keine anderen Units.

Luckie 16. Sep 2016 13:02

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Bei eigenen Units setze ich imme rmeinen Kürzel vor den Namen. In diesem Fall wäre das dann MPHash. Dann sehe ich schon am Namen, das sich den Code in der Unit verbrochen habe.

Uwe Raabe 16. Sep 2016 13:03

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Zitat:

Zitat von gammatester (Beitrag 1347826)
Heißt das, daß in dem Project dann alle Namespace-Prefixes nicht mehr verwendet werden (können), außer System also auch VCL, Winapi etc?

Natürlich kann man auch nur System rausnehmen, aber das wird im Falle eines Konflikts (s.u.) auch nicht gehen.

Zitat:

Zitat von gammatester (Beitrag 1347826)
Das sollte kein Problem sein, da mein Hash nur eine eigene Unit BTypes benutzt (für Typdefinitionen), BTypes selbst beutzt keine anderen Units.

Das kann aber für andere Bibliotheken, die der Anwender verwendet, trotzdem relevant sein. Es gibt einige Libraries, die intern nur die alten Unitnamen (z.B. SysUtils) verwenden, um den Sourcecode kompatibel mit älteren Delphi-Versionen zu halten. Die Verwendung von Units einer solchen Library erfordert aber zwingend den Einsatz von Gültigkeitsbereichsnamen.

Wenn deine Unit nun diesen Einsatz (und sei es nur für System) verbietet, gibt es eine Kollision.

Um das Problem dauerhaft und ohne Klimbzüge des Anwenders aus der Welt zu schaffen, plädiere ich daher für die Umbenennung deiner Unit. Du kannst ja die Compilierfähigkeit der alten Projekte durch einen geeigneten Unit-Alias wieder herstellen.

BUG 16. Sep 2016 13:18

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Zitat:

Zitat von Luckie (Beitrag 1347830)
Bei eigenen Units setze ich imme rmeinen Kürzel vor den Namen. In diesem Fall wäre das dann MPHash.

Könnte auch Multi-Processing Hash heißen :angel2:

gammatester 16. Sep 2016 13:37

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1347831)
Um das Problem dauerhaft und ohne Klimbzüge des Anwenders aus der Welt zu schaffen, plädiere ich daher für die Umbenennung deiner Unit. Du kannst ja die Compilierfähigkeit der alten Projekte durch einen geeigneten Unit-Alias wieder herstellen.

Für Delphi mag das ja möglich sein (zB in .cfg), aber ich wüßte nicht, daß FreePascal und Virtualpascal Unit-Alias unterstützen. Im übrigen geht es ja nicht darum, daß ich nicht compilieren kann, sondern meine User.

Weiterhin weiß ich nicht, was die neuen Delphis machen, wenn man

/AHash=MyHash

verwendet, würde da nicht das gleiche Problem auftauchen?

Luckie 16. Sep 2016 13:44

AW: Units mit gleichem Namen (System.Hash und Hash)
 
Zitat:

Zitat von BUG (Beitrag 1347838)
Zitat:

Zitat von Luckie (Beitrag 1347830)
Bei eigenen Units setze ich imme rmeinen Kürzel vor den Namen. In diesem Fall wäre das dann MPHash.

Könnte auch Multi-Processing Hash heißen :angel2:

Ok. OK. OK. Dann eben PuffHash. Was fällt dir dazu ein? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.
Seite 1 von 2  1 2   

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