Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Wie korrekt "uses ... in '...'" deklarieren?


Stoney - Di 14.03.06 21:32
Titel: Wie korrekt "uses ... in '...'" deklarieren?
Ich arbeite momentan an einem größeren OpenSource-Projekt (einer 2D-"Engine") und möchte vor dem nächsten großen Release die Units etwas ordnen. Bisher hatte ich alle Klassen und Prozeduren/Funktionen in einer Unit zusammengeschustert. Wenn die Unit aber etwas größer wird (wie in diesem Fall), dann geht einiges an Übersichtlichkeit verloren. Also hat mir ein Mitprogrammierer geraten, die Unit in mehrere kleine Units aufzuteilen.
Damit es etwas geordneter ist, wollte ich die kleineren Units in einen Unterordner stecken, während die Hauptunit im Haupt-Verzeichnis (das Verzeichnis ist im Bibliothekspfad von Delphi) liegt.

Also hatte ich überlegt, die Sub-Units folgendermaßen einzubinden:


Quelltext
1:
2:
3:
4:
uses Subunit1 in 'Ordner/subunit1.pas',
     Subunit2 in 'Ordner/subunit2.pas',
     Subunit3 in 'Ordner/subunit3.pas',
     ... etc.


Leider funktionniert das nicht so wie ich dachte. Als Fehler wird angezeigt, dass die DCU nicht gefunden wird. Klingt für mich etwas komisch, reicht es nicht aus, wenn die PAS da ist?
Was habe ich falsch gemacht? Gibt es eine Möglichkeit, ohne den Ordner als Bibliothekspfad in Delphi einzutragen?
Übrigens hat es keine Wirkung, ob es jetzt ein / oder ein \ ist.


Born-to-Frag - Di 14.03.06 21:34

Nein, die dcu muss natürlich auch da sein. Also so wie es jetzt ist, müssten deine Subunits in DeinProjektOrdner\Ordner\ liegen... die dcus der unit werden aber ja miterstellt..


greetz


Stoney - Di 14.03.06 21:43

user profile iconBorn-to-Frag hat folgendes geschrieben:
Nein, die dcu muss natürlich auch da sein.

Aber wie ist es jetzt zum Beispiel bei Freepascal und Lazarus, dort gibt es schließlich keine DCUs?

Zitat:
Also so wie es jetzt ist, müssten deine Subunits in DeinProjektOrdner\Ordner\ liegen... die dcus der unit werden aber ja miterstellt..


Da hast du vollkommen recht, wenn es sich um eine VCL-Anwendung handeln würde. Bei meinem Projekt handelt es sich aber um eine plattforumunabhängige Unitsammlung.


JayK - Di 14.03.06 22:11

Freepascal macht ppu und o drauß, Delphi dcu.
Ich kann grundlegend erstmal keinen Fehler in der Deklaration feststellen.
uses unit in 'subordner\unit.pas' meiner Meinung nach richtig :?
Aber bei mir funktioniert das auch manchmal nicht, später wieder doch, so richtig durchschaut hab auch ich es noch nicht ;)
Sind die Units (pas oder dcu, is egal) wirklich in dem Unterordner? Tippfehler ausschließen.

Wenn du ein VCL-Projekt anfängst, kannst ja in die .dpr Datei gucken, da sind die Form-Units ja mit diesem in 'Pfad' eingebunden.

Ansonsten lass das "in sowieso" weg und packe für das Projekt in die Projektoptionen einen extra Suchpfad rein. Projektoptionen -> Verzeichnisse und Bedingungen oder so.
Achnee, wenn du ne Engine machst, dann hat ja jeder sein eigenes anderes Projekt...

Kannst ja als Bedingung für die benutzenden Programmierer hinschreiben (install.htm, readme.htm), dass sie ihre Suchpfade um diesen Ordner ergänzen sollen.


Stoney - Mi 15.03.06 23:15

Ich bin jetzt zu des Rätsels Lösung gekommen: Das uses ... in ... ist zwar korrekt deklariert, funktionniert allerdings nur bei DPR.


F34r0fTh3D4rk - Do 07.08.08 19:04

Warum ist das so ? Ich habe schon häufiger versucht, Units in Unterordner zu packen und einzubinden. (Meistens Fremdunit-Sammlungen)
Wie stelle ich das an ?

€: Einfach die Units in der dpr hinzufügen, dann können sie überall über die uses Klausel eingebunden werden.

mfg


Marc. - Do 07.08.08 20:29

Units lassen sich auch bequem via Projekt Manager einbinden. Strg+Alt+F11 -> Rechtsklick -> Add. :zwinker:

cu
Marc.


F34r0fTh3D4rk - Fr 08.08.08 00:17

Genau das meinte ich ;)