Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Namespaces unter Delphi 10 Rio (https://www.delphipraxis.net/198761-namespaces-unter-delphi-10-rio.html)

Delbor 28. Nov 2018 09:01

Namespaces unter Delphi 10 Rio
 
Hi zusammen

Nachdem ich nun alle Fremdkomponenten im Anschluss an diesen Thread installiert habe und die Dinger auch in der (Tool-)Palette aufgeführt sind, wollte ich das auch testen. Ich hab also auf eines der Beispielprogramme mal eine TOcr-Komponente gepackt und F9 gedrückt. Resultat: 1 Feher. Angemeckert wurde die Unit Ocr, die der Compiler nicht finden konnte.

Mit allen anderen Fremdkomponenten wars genau dasselbe, einschliesslich der TFilesearcher-Komponte, von der ich aus früheren Versionen (auch Tokio) weiss, dass sie sich Problemlos neu compilieren lässt, bzw. auch ohne diese installiert werden kann.

Such- und Bibliothekspfad sollte soweit in Ordnung sein, also hab ich mich mal versucht, zu Namespaces schlau zu machen. Soweit ich das richtig verstanden habe, muss ich dem Unitnamen den gewünschten Namespace-Namen voranstellen, bevor ich sie zusammen mit diesem speichere.
Hab ich das richtig verstanden?
Oder muss ein eigener Namespace speziell deklariert werden?

Gruss
Delbor

jaenicke 28. Nov 2018 10:33

AW: Namespaces unter Delphi 10 Rio
 
Man muss in eigenen Units keine Namespaces nutzen. Es macht aus Gründen der Übersichtlichkeit natürlich Sinn, ist aber keine Pflicht.

Lediglich bei bestehenden Namespaces in Units, z.B. beim Zugriff auf VCL- und RTL-Units, muss man den Namespace entweder in den Projektoptionen hinterlegen oder an jeder Unit in der uses-Klausel angeben.

Wenn der Compiler also eine Unit nicht finden kann, liegt die .dcu nicht im Bibliothekspfad. Mit Hilfe des Process Monitors kann man auch leicht prüfen wo gesucht wird. Ein beliebter Fehler ist den 64-Bit Bibliothekspfad statt den für 32-Bit zu setzen.

Delbor 28. Nov 2018 11:11

AW: Namespaces unter Delphi 10 Rio
 
Hi jaenicke
Zitat:

Zitat von jaenicke (Beitrag 1419501)
Wenn der Compiler also eine Unit nicht finden kann, liegt die .dcu nicht im Bibliothekspfad. Mit Hilfe des Process Monitors kann man auch leicht prüfen wo gesucht wird. Ein beliebter Fehler ist den 64-Bit Bibliothekspfad statt den für 32-Bit zu setzen.

Vielen Dank für deine Antwort! Tatsächlich konnte ich mir die Frage, welche Datei wohin gehört(dcu, pas oder was) nicht endeutig beantworten.
In den letzten Wochen hab ich mir angewöhnt, für alle Projekte nebst dem Debug- auch ein DCU-Verzeichnis anzulegen. Du hattest mal davon gesprochen, dass ihr einen eigenen zentralen Dcu-Pfad benützt. Ich denke, dass sollte ich beherzigen.
Angelegt hab ich mir sowas zwar, hatte dann aber bedenken, dass es nicht so einfach sein könnte, da nur die DCUs eines bestimmten Projektes zu löschen, Tja, man kann auch verkehrt denken...

Gruss
Delbor

PS:
Zitat:

Lediglich bei bestehenden Namespaces in Units, z.B. beim Zugriff auf VCL- und RTL-Units,
Bei einer der Fremdkomponenten wurde die Unit Graphics als nicht gefunden angemeckert - ein VCL. davor, und gut war.

jaenicke 28. Nov 2018 12:19

AW: Namespaces unter Delphi 10 Rio
 
Zitat:

Zitat von Delbor (Beitrag 1419510)
Angelegt hab ich mir sowas zwar, hatte dann aber bedenken, dass es nicht so einfach sein könnte, da nur die DCUs eines bestimmten Projektes zu löschen, Tja, man kann auch verkehrt denken...

Wir haben ein .dcu Verzeichnis für unsere Packages, so dass gemeinsame Units nur in einem Pfad gesucht werden müssen. Daher ist der auch fast der einzige Pfad, der im globalen Bibliothekspfad drin steht.

Dazu haben wir dann ein zweites Verzeichnis, in das die diversen Projekte, jeweils in einem eigenen Unterordner und darin nach Plattform und Debugkonfiguration getrennt, ihre .dcu Dateien ablegen. Denn die werden ja nur innerhalb des Projekts benötigt.

Der Effekt ist, dass gemeinsame Units zentral in Packages kompiliert und von allen Projekten gefunden werden. Diese Units werden auch nicht in die verschiedenen Projekte eingebunden. Die Units der einzelnen Projekte wiederum behindern sich gegenseitig auch nicht, denn diese kompilieren ja immer in verschiedene Verzeichnisse. Und wie du schon sagtest, man kann so die .dcu Dateien eines Projektes leicht löschen.

Wir können aber auch alle .dcu Dateien, auch die im Bibliothekspfad, löschen und dann einfach per Batchdatei wieder erstellen lassen. Die Batchdatei kopiert die .res Dateien usw., die eingebunden werden, in den Bibliothekspfad und kompiliert dann mit Hilfe von msbuild die Packages. In der aktuellen Version installiert es auch die Packages, so dass die Installation nun sehr einfach ist:
Delphi installieren, JEDIs installieren, install.cmd ausführen
Es werden auch die Einstellungen von Delphi und den CnWizards direkt gesetzt.

Delbor 28. Nov 2018 13:59

AW: Namespaces unter Delphi 10 Rio
 
Hi jaenicke

So, wie's jetzt aussieht, gibts wohl etwas mehr Arbeit für mich - ich hab das eine Package-Projekt geöffnet, da den DCU-Pfad geändert und neu compiliert. Allerdings habe ich die Komponenten nicht deinstalliert, und so ist eigentlich alles beim alten geblieben. Das heisst für mich eigentlich: Neu anfangen.
Wobei ich mir auch nicht sicher bin, nicht von Anfang an einen Fehler gemacht zu haben: Statt <Komponente/Komponente installieren> habe ich über die Objectablage ein neues Package erstellt und da die Komponenten reingepackt. Auch möglich, dass dsa nicht explizit falsch ist, nur sollte ich über <Komponente/Komponente installieren> mehr Möglichkeiten haben.

Gruss
Delbor

jaenicke 28. Nov 2018 21:48

AW: Namespaces unter Delphi 10 Rio
 
Zitat:

Zitat von Delbor (Beitrag 1419561)
Wobei ich mir auch nicht sicher bin, nicht von Anfang an einen Fehler gemacht zu haben: Statt <Komponente/Komponente installieren> habe ich über die Objectablage ein neues Package erstellt und da die Komponenten reingepackt. Auch möglich, dass dsa nicht explizit falsch ist, nur sollte ich über <Komponente/Komponente installieren> mehr Möglichkeiten haben.

Der Wizard ist eher etwas für Anfänger, weil es relativ umständlich aber dafür einfach ist.
Der Weg über ein ganz normales Package ist schon richtig.

Das Problem ist immer noch die Unit ocr, die in diesem Package drin ist. Wie lauten denn der dcu- und der dcp-Ausgabepfad? Und wie sieht dein Bibliothkspfad aus? Wo liegt die ocr.dcu?

Delbor 29. Nov 2018 10:00

AW: Namespaces unter Delphi 10 Rio
 
Hi jaenicke

Zitat:

Zitat von Delbor (Beitrag 1419561)
Hi jaenicke
So, wie's jetzt aussieht, gibts wohl etwas mehr Arbeit für mich - ich hab das eine Package-Projekt geöffnet, da den DCU-Pfad geändert und neu compiliert. Allerdings habe ich die Komponenten nicht deinstalliert, und so ist eigentlich alles beim alten geblieben.

Zumindest gehe ich davon aus, dass sich an installierten Komponenten vorrerst nichts ändert, auch wnn das Package neu compiliert wurde.
Die einzelnen Package-Projekte und die Bpls gibts ja noch. Von daher ists wirklich das einfachste, diese zu bearbeiten und neu zu compilieren.

Zitat:

Zitat von Delbor (Beitrag 1419561)
Wobei ich mir auch nicht sicher bin, nicht von Anfang an einen Fehler gemacht zu haben: Statt <Komponente/Komponente installieren> habe ich über die Objectablage ein neues Package erstellt und da die Komponenten reingepackt. Auch möglich, dass dsa nicht explizit falsch ist, nur sollte ich über <Komponente/Komponente installieren> mehr Möglichkeiten haben.

Ich denke, ich hätte mit diesem Wizard eine einfache Möglichkeit, alle Komponenten in ein einziges Package zu packen. Wobei es mir allerdings eher darum geht, dass die meisten (der Filesearcher passt thematisch nicht) auf einer einzigen Palettenseite zusammengefasst werden. Aber auch da brauchts den Wizard wohl nicht unbedingt.

Zitat:

Zitat von jaenicke (Beitrag 1419610)
Das Problem ist immer noch die Unit ocr, die in diesem Package drin ist. Wie lauten denn der dcu- und der dcp-Ausgabepfad? Und wie sieht dein Bibliothkspfad aus? Wo liegt die ocr.dcu?

Wie ich festgestellt habe, war das nicht das einzige Problem. Ich habe nacheinander jeweils eine dieser Komponenten auf das Beispielprogramm gesetzt; deren Units wurden alle als nicht auffindbar angemeckert.
Die OCR liegt hier: F:\Embarcadero Erweiterungs-Corner\DCU. Diesen Pfad hab ich angegeben, bevor ich neu kompilierte. Diese Unit sollte also gefunden werden, wenn ich wieder neu installiere.
Bei den andern Fremdkomponenten muss ich die Pfade noch anpassen.

Gruss
Delbor

jaenicke 29. Nov 2018 12:18

AW: Namespaces unter Delphi 10 Rio
 
Zitat:

Zitat von Delbor (Beitrag 1419651)
Ich denke, ich hätte mit diesem Wizard eine einfache Möglichkeit, alle Komponenten in ein einziges Package zu packen. Wobei es mir allerdings eher darum geht, dass die meisten (der Filesearcher passt thematisch nicht) auf einer einzigen Palettenseite zusammengefasst werden. Aber auch da brauchts den Wizard wohl nicht unbedingt.

Die Palettenseite legst du ja in der Register Prozedur der Komponente fest. Und alle in ein Package geht ja nun sehr viel einfacher, wenn du die Units per Drag-and-Drop in das Package ziehst, als jedesmal den Wizard zu durchlaufen...

Delbor 29. Nov 2018 12:50

AW: Namespaces unter Delphi 10 Rio
 
Hi jaenicke

Zitat:

Zitat von jaenicke (Beitrag 1419681)
Die Palettenseite legst du ja in der Register Prozedur der Komponente fest. Und alle in ein Package geht ja nun sehr viel einfacher, wenn du die Units per Drag-and-Drop in das Package ziehst, als jedesmal den Wizard zu durchlaufen...

Upps! Klar, das mit der Palettenseite stimmt, und ich hatte mir das auch vorgenommen. Aber irgendwie gings schlicht vergessen...
Und die Sache mit dem Drag&Drop - da hätte ich auch selbst draufkommen müssen.
Die DCUs liegen jeweils zusätzlich zum Verzeichnis'Debug' im Ordner der jeweilge Komponente, während die dcps in dem unter Tools/Optionen festgelegte Ordner liegen.


Gruss
Delbor

Delbor 3. Dez 2018 10:59

AW: Namespaces unter Delphi 10 Rio
 
Hi zusammen

Zitat:

Zitat von jaenicke (Beitrag 1419610)
Das Problem ist immer noch die Unit ocr, die in diesem Package drin ist. Wie lauten denn der dcu- und der dcp-Ausgabepfad? Und wie sieht dein Bibliothkspfad aus? Wo liegt die ocr.dcu?

Hmm... Ich hab mich in den letzten Tagen ziemlich durch das Embbarcadero-Wicki gewühlt, unter anderem auch zum Thema Namespaces.
Zitat daraus:
Zitat:

Eine Unit ohne expliziten Namespace wird als generische Unit bezeichnet. Eine generische Unit ist automatisch ein Element des Projekt-Standard-Namespace. Ausgehend von der obigen Program-Deklaration veranlasst die folgende Unit-Deklaration, dass der Compiler MyUnit als Element des Namespace MyCompany.Programs behandelt:

unit MyUnit;

Der Projekt-Standard-Namespace hat bei generischen Units keinen Einfluss auf den Namen der Delphi-Quelldatei. Ausgehend von obiger Deklaration würde dieser Name MyUnit.pas lauten. Dieselbe Regel gilt für den Namen der dcu-Datei. Die resultierende dcu-Datei würde für das aktuelle Beispiel MyUnit.dcu heißen.
Das verstehe ich nun so, dass die generische Unit Ocr, sobald sie im Package unter Contains eingebunden wird, zum Projekt-Standard-Namespace des Packages gehört - und da gibt es sie eben nicht. Das heisst für mich: Ich muss herausfinden, wie der Projekt-Standard-Namespace dieser Unit heisst oder sie mit einem eigenen Namespace abspeichern.
Das würde bedeuten, dass ich die Sourcen der Komponenten neu mit einem Namespace speichern und die Komponente neu kompilieren muss.
Hat da jemand andere Erfahrungen?

Gruss
Delbor

jaenicke 4. Dez 2018 03:35

AW: Namespaces unter Delphi 10 Rio
 
Der Standard-Namespace ist einfach leer, wenn du ihn dir als String vorstellen möchtest.

Das ist einfach so wie in der Welt ohne Namespaces in alten Delphiversionen. Da ist nichts Besonderes dabei, es geht nur um den Pfad um die Unit zu finden.

Wenn es nicht klappt, ist es wie gesagt in wenigen Minuten mit dem Process Monitor herauszufinden wo diese Unit gesucht wird. (Bzw. in Sekunden, wenn man das Tool schon hat...)

Einfach einen Filter auf Path ends with ocr.dcu setzen...

hoika 4. Dez 2018 05:57

AW: Namespaces unter Delphi 10 Rio
 
Hallo,
ich hätte mal das Leerzeichen im Pfad als mögliches Problem anzugeben.

Delbor 4. Dez 2018 10:17

AW: Namespaces unter Delphi 10 Rio
 
Hi zusammenn
Zitat:

Zitat von jaenicke (Beitrag 1420040)
Der Standard-Namespace ist einfach leer, wenn du ihn dir als String vorstellen möchtest.

Das ist einfach so wie in der Welt ohne Namespaces in alten Delphiversionen. Da ist nichts Besonderes dabei, es geht nur um den Pfad um die Unit zu finden.

Wenn es nicht klappt, ist es wie gesagt in wenigen Minuten mit dem Process Monitor herauszufinden wo diese Unit gesucht wird. (Bzw. in Sekunden, wenn man das Tool schon hat...)

Einfach einen Filter auf Path ends with ocr.dcu setzen...

Ich denk, ich hab meinen Denkfehler gefunden. Zitat aus dem Embarcadero-Wicki:
Zitat:

Program MyCompany.Programs.MyProgram;
Library MyCompany.Libs.MyLibrary;
Package MyCompany.Packages.MyPackage;

Diese Anweisungen richten den Projekt-Standard-Namespace für ein Programm (Program), eine Bibliothek (Library) und ein Package (Package) ein. Der Namespace ergibt sich, wenn der Bezeichner auf der rechten Seite (einschließlich Punkt) aus der Deklaration entfernt wird.
Das heisst: Mein Package 'Package Ocr.Bpl' hat gar keinen Projekt-Standard-Namespace, und die Unit 'Ocr1' kann desshalb nicht Teil dieses nichtvorhandenen Namespaces sein.

Da ich mehrere Versuche rund um dieses Package gemacht habe und das Resultat war, dass mehrere Versionen dieses Packages an an verschiedenen Orten vorhanden waren, hab ich mal den Rat von hier befolgt und alle Dateien dieses Packages gelöscht( Beitrag #4).

Eine mögliche Quelle sähe ich allenfalls noch: Die Fremdkomponenten und die eigenen Packages liegen (oder lagen) in 2 verschiedenen Verzeichnissen, bzw. ich habe die Units nicht, wie ich es bei Programmen gewohnt bin, über 'Projekt => dem Projekt hinzufügen' sondern über Rechtsklick in der Projektverwaltung hinzugefügt (unter Contains) - zumindest bis jetzt hab ich gedacht, die Unit würde sich dann im Packagepfad wiederfinden...

Zitat:

Zitat von hoika (Beitrag 1420041)
Hallo,
ich hätte mal das Leerzeichen im Pfad als mögliches Problem anzugeben.

Leerzeichen?
Delphi-Quellcode:
F:\Embarcadero Erweiterungs-Corner\Fremdkomponenten\...

Uupps! Das hab ich völlig übersehen!! Aber was mich sehr irritiert: solche Pfade stehen unter dem Bibliotheks- und dem Suchpfad und werden da nicht als ungültig bezeichnet.

Gruss
Delbor

jaenicke 4. Dez 2018 12:59

AW: Namespaces unter Delphi 10 Rio
 
Zitat:

Zitat von Delbor (Beitrag 1420051)
Das heisst: Mein Package 'Package Ocr.Bpl' hat gar keinen Projekt-Standard-Namespace, und die Unit 'Ocr1' kann desshalb nicht Teil dieses nichtvorhandenen Namespaces sein.

Eine Unit ohne Namespace ist immer im Standard-Namespace, zusammen mit allen anderen Units ohne Namespace. Da ist alles in Ordnung. Wenn du Unit Ocr1 heißt, wird auch nach der Ocr1.dcu gesucht bzw. auch nach der .dcp Datei des Packages.

Die Frage ist eben wo diese .dcu liegt und warum diese nicht gefunden wird. Und statt hier ewig zu suchen würde ich wirklich einfach den Process Monitor benutzen... wie gesagt, auf Filter gehen, filtern auf "Path" "ends with" "Ocr1.dcu" und bestätigen, dann einmal kompilieren bis der Fehler, dass die Unit nicht gefunden wird, kommt. Und dann einfach schauen wo gesucht wurde.

Delbor 4. Dez 2018 14:20

AW: Namespaces unter Delphi 10 Rio
 
Hi jaenicke

Ich hab mir den Prozessmanager heruntergeladen und installiert.Dann hab ich den Filter mal so eingegeben, wie du ihn notiert hast.
Inzwischen hatte ich allerdings den Filesearcher installiert - richtige Palettenseite, richtiges Icontest, weise anderes Beispielprogramm. Filesearcher drauf F9 gedrückt. Resultat:
Zitat:

[dcc32 Fataler Fehler] uMain.pas(7): F2613 Unit 'FileSearch' nicht gefunden.
Dann hab ich mal einen zweiten Filter eingegebe - bis auf den Dateinamen identisch. Ergebnisse: Der Prozessmonitor meldet 'otu of Memory undverabschiedete sich nach dem 'OK'. Also sollte ich mir die/den vorhandenen Filter anzegen lassen.
Mal sehen, wie ich da mit meinem englisch zurechtkomme...

Gruss
Delbor

jaenicke 5. Dez 2018 19:44

AW: Namespaces unter Delphi 10 Rio
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Delbor (Beitrag 1420070)
Ergebnisse: Der Prozessmonitor meldet 'otu of Memory undverabschiedete sich nach dem 'OK'.

Komisch, wir benutzen den sehr oft und haben damit nicht solche Probleme. Eigentlich sollte das so aussehen, wenn z.B. nach der Unit ocr und ocr1 gesucht wird und ocr im Projektpfad existiert:

Anhang 50393

Delbor 6. Dez 2018 13:44

AW: Namespaces unter Delphi 10 Rio
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi jaenicke

Okay, ich denke, ich mach so ziemlich alles falsch - auf jeden Fall krieg ich nicht im entferntesten eine Ausgabe, wie du sie gezeigt hast. Im folgenden mal zwei Jpegs
Anhang 50399
Das erste zeigt den Filter, wie ich ihn im Prozessmonitor eingegeben habe
Anhang 50400
Auf einem der Beispielprogramme hab ich eine Filesearcher-Komponente platziert.. Versuche ich nun zu kompilieren, wird der Vorgang abgebrochen:
Zitat:

[dcc32 Fataler Fehler] uDateTimePickers.pas(18): F2613 Unit 'DDFileUtils' nicht gefunden.
Ändere ich die Reihenfolge, hab ich dasselbe, einfach 'in grün'.
Um zu kompilieren, minimiere ich den Prozess Monitor; hole ich ihn hervor, ist das Fenster blank...

Gruss
Delbor

TiGü 6. Dez 2018 19:44

AW: Namespaces unter Delphi 10 Rio
 
Der Filter kann so natürlich nicht funktionieren.
Blättere doch mal die beiden Comboboxen vor den Filter Edition auf und schaue was es außer "Architecture is" noch so gibt.

Delbor 6. Dez 2018 21:11

AW: Namespaces unter Delphi 10 Rio
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Tigü
Du meinst diese hier:
Anhang 50405
Ich hab da mal path ausgewählt - mit dem selben Resultat.

Gruss
Delbor

jaenicke 6. Dez 2018 21:33

AW: Namespaces unter Delphi 10 Rio
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir sieht der Filter z.B. so aus:

Anhang 50406


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 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