![]() |
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 |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
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. |
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. |
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?
|
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
Zitat:
|
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.
|
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
Zitat:
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. |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
|
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
Weiterhin weiß ich nicht, was die neuen Delphis machen, wenn man /AHash=MyHash verwendet, würde da nicht das gleiche Problem auftauchen? |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
|
AW: Units mit gleichem Namen (System.Hash und Hash)
* Suchpfade änndern, in der Reihenfolge. Hash zuerst finden lassen und dann System.Hash
* "System"-Namespace aus den Projektoptionen entfernen und überall explizit System.Hash aufrufen, wo das gemeint ist oder * Hash.pas umbenennen Ich mache bei allen meinen Units auch immer einen Namespace davor (jetzt mit Punkt und früher per CamelCase oder mit _) PuffHasch.pas ... das Haschisch, wat man nur im gut sortierten Puff-Shop findet, neben den heißen Damen |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
Delphi-Quellcode:
uses system.hash, hash, ...;
|
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
Ich meine, was willst du machen? Du hast eine Unit mit einem Namen, der sich mit dem einer System-Unit in neueren Delphi-Versionen beisst. Es ist ja kaum anzunehmen, daß das seitens Delphi geändert wird, also musst du schon selbst die nötigen Schritte vornehmen, aus diesem Dilemma zu entkommen. So ganz ohne Federn zu lassen wird das nicht gehen. |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
![]() Zitat:
|
AW: Units mit gleichem Namen (System.Hash und Hash)
Delphi bindet das zuerst ein, was vorne steht,
aber es sucht von hinten, also immer erst von der Nächsten zur entferntesten Deklaration :zwinker: ... ist doch sinnig, oder? Und ich meinte nicht die Uses, sondern die Suchpfade. Damit beim Suchen nach "Hash" zuerst "Hash" und dann System.Hash gefunden würde. Die Suche nach Hash oder DieVordefiniertenNamespaces.Hash finden dann zuerst Hash und eben nicht System.Hash :stupid: Die Reihenfolge in der Uses-Klausel hat einen kleinen Einfluss auf die Initialisierungsreihenfolge der Units und auf
Delphi-Quellcode:
uses AnsiStrings, SysUtils;
AnsiSameStr = SysUtils.AnsiSameStr
Delphi-Quellcode:
uses SysUtils, AnsiStrings;
AnsiSameStr = AnsiStrings.AnsiSameStr |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
Zitat:
Die Tendenz ist allerdings: Sollen die XE8+ User doch selbst die Namens-Änderung vornehmen. Und natürlich: Uwe, vielen Dank für Deine fachlich hervorragenden Vorschläge. |
AW: Units mit gleichem Namen (System.Hash und Hash)
Zitat:
War auch nicht ganz erst gemeint. Wenn man es wirklich eindeutig machen will, muss man eh registrierbare eindeutige Namen nehmen (wie Domainnamen in Java). |
AW: Units mit gleichem Namen (System.Hash und Hash)
Info: Der Bug ist gefixt in Embarcadero® Delphi 10.2 Version 25.0.26309.314, vgl.
![]() Selbst getestet. Gruß Gammatester |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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