AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?
Thema durchsuchen
Ansicht
Themen-Optionen

Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

Ein Thema von Andreas13 · begonnen am 25. Jul 2023 · letzter Beitrag vom 27. Jul 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
692 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 08:36
Hey,
Eine Unit hat einen Initialization Abschnitt.
Du könntest damit erreichen das sich jede Unit in eine globale Liste einträgt.
Später, nachdem alle Units geladen sind, kannst du dann in der Liste nachsehen wer alles da ist.
Zwischendurch geht das aber nicht, da es Sache des Compilers/Linkers ist zu entscheiden wann welche Unit geladen/Initialisiert wird.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.667 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 09:12
Eine Unit hat einen Initialization Abschnitt.
Du könntest damit erreichen das sich jede Unit in eine globale Liste einträgt.
Später, nachdem alle Units geladen sind, kannst du dann in der Liste nachsehen wer alles da ist.

Es gibt diese globale Liste bereits. Man kann damit herausfinden, ob eine Unit in ein Executable eingebunden ist oder nicht. Falls es das ist, was der OP erreichen möchte, hier ist Code dafür auf Stack Overflow (als Antwort auf eine Frage, die ich damals gestellt hatte).
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
692 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 12:58
Eine Unit hat einen Initialization Abschnitt.
Du könntest damit erreichen das sich jede Unit in eine globale Liste einträgt.
Später, nachdem alle Units geladen sind, kannst du dann in der Liste nachsehen wer alles da ist.

Es gibt diese globale Liste bereits. Man kann damit herausfinden, ob eine Unit in ein Executable eingebunden ist oder nicht. Falls es das ist, was der OP erreichen möchte, hier ist Code dafür auf Stack Overflow (als Antwort auf eine Frage, die ich damals gestellt hatte).
Wieder was gelernt
Mir ist schon vor langer Zeit beim durchsuchen von meinen, mit Delphi erzeugten, Binaries aufgefallen das da die ganzen Unit Namen drinne stehen. Einen Sinn habe ich darin nie gesehen.
Ich verwende die Initialization Abschnitte auch nicht zum sammeln von Unit Namen, wozu auch . Sondern zum registrieren von Funktionen oder Klassen für automatische Konverter/etc.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 13:16
Jupp, diese Liste wird benutzt, um beim Start alle Initialization und am Ende alle Finalization zu durchlaufen.
Aber dort stehen nicht ALLE Units drin, vor allem nicht, wenn sie weder Initialization/Finalization, Class-Constructor/Destructor oder globale Variablen haben, weil dann ist es ja nicht nötig was zu machen.

Auch in den Ressourcen der EXE/DLL findet sich was, wo die Units aufgelistet werden.

Dann die Debuginfos als PE-Section.

Oder, wie schon gesagt, über Delphi-Referenz durchsuchenTRTTI danach suchen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.667 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 18:54
sammeln von Unit Namen, wozu auch .
Z.B. um im (generischen) About-Dialog die passenden Credits zu den verwendeten Bibliotheken anzuzeigen. Dazu ist das echt praktisch.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 19:38
Du baust also extra einen Code, der speziell nach dieser Unit sucht (oder Irgendeiner, die zufällig gleich heißt, aber was ganz Anderes ist),
um mit dieser Info dann was zu machen.

Warum dann nicht diese Info direkt reinschreiben?


Wenn, dann wäre es besser, wenn der Entwickler eine standardisierte Credits-Ressource bei legt, oder z.B. ein standardisiertes Credits-Attribut an seine Unit/Klasse/Sonstwas hängt, die man dann leicht finden könnte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.667 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 27. Jul 2023, 10:54
Du baust also extra einen Code, der speziell nach dieser Unit sucht (oder Irgendeiner, die zufällig gleich heißt, aber was ganz Anderes ist),
um mit dieser Info dann was zu machen.

Warum dann nicht diese Info direkt reinschreiben?

Wenn, dann wäre es besser, wenn der Entwickler eine standardisierte Credits-Ressource bei legt, oder z.B. ein standardisiertes Credits-Attribut an seine Unit/Klasse/Sonstwas hängt, die man dann leicht finden könnte.
Ich vermute, zumindest der letze Absatz bezog sich auf mich?

(Hint: Ein Quote hätte hier Klarheit geschaffen.)

Da die Entwickler diese Ressource nicht zur Verfügung stellen und ich nicht an deren Code rumfummeln will, war die Suche nach einer Unit, die beim Einbinden einer Bibliothek immer vorhanden ist, die einfachste Lösung. Und da die meisten Bibliotheken ein individuelles Prefix im Unit-Namen verwenden, ist das auch ziemlich eindeutig.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 27. Jul 2023, 14:14
Das bezog sich eigentlich auf "alle" Entwickler von Komponenten


Und wie schon erwähnt, kannst'e bei vielen Komponenten auch nach einer derer Ressourcen suchen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 09:17
Mir geht es konkret um die Benutzung der von arcticwolf bereitgestellten Bibliothek https://www.delphipraxis.net/213259-...ml#post1524889

Diese Console Library hat für meine unzähligen Test-Berechnungen einige Vorteile (Umlaute, Farben, größere Schrift etc.) gegenüber der Standard-Console.
Weil es jedoch bei einer direkten Einbindung von Crt.pas zu Namenskonflikten kommt, habe ich eine Zwischen-Unit angelegt und die für mich wichtigsten Routinen exportiert.
Um einfach zwischen der "neuen" und der "alten" Konsole-Ausgabe hin- und herschalten zu können, wollte ich in der Zwischen-Unit die Function WriteLn per Overload in der Weise neu deklarieren, daß bei Abwesenheit der neuen Console Library System.WriteLn(..) benutzt wird, ansonsten das neue Crt.WritelnConsole(..) . Dadurch hätte ich alte Berechnungen wie gehabt und neue mit der neuen Console Library kompilieren können, ohne viel ändern zu müssen.

Wahrscheinlich habe ich viel zu kompliziert gedacht...

Danke für Eure Tipps & Anregungen!
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Unit-übergreifende Sichtbarkeit von {$Define …} - geht das?

  Alt 26. Jul 2023, 09:43
Zitat:
Weil es jedoch bei einer direkten Einbindung von Crt.pas zu Namenskonflikten kommt
Mit welchen Namenskonflikten hast Du zu kämpfen?

Es gibt da in der "Console Library" einen Schalter mit dem Du festlegen kannst ob Write/Writeln vom System oder von meiner Library behandelt werden soll. Per Default steht der Schalter auf True. Du kannst ihn mal ausschalten und testen ob das bei deinem Problem hilft.

Console.Modes.UseAlternateWriteProc := False;

Du kannst das entweder direkt beim Start deines Programmes machen oder aber partiell bei einer Funktion, indem Du ihn auf False und danach wieder auf True stellst.
Wolfgang
coding is an art - code for people not for machines
  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 14:56 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 by Thomas Breitkreuz