AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Verständnisfrage zur Package-Entwicklung in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zur Package-Entwicklung in Delphi

Ein Thema von SusiT · begonnen am 28. Jun 2022 · letzter Beitrag vom 1. Jul 2022
Antwort Antwort
SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#1

Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 28. Jun 2022, 14:00
Hallo an alle,

ich beschäftige mich im Moment damit wie Packages funktionieren, um diese selbst zu erstellen und möglichst effektiv einzurichten und anwenden zu können.
Hier stoße ich im Detail auf Verständnisprobleme, bei denen ich für Tipps und Erklärungen offen bin.

1)
Ich habe im Delphi ein neues Package Projekt erstellt und mit ein paar Demo.pas Dateien kompiliert. Diese Dateien sind im "Enthält" Ordner hinterlegt.
2)
Im zweiten Step habe ich eine VCL-Formularanwendung erstellt und möchte aus dieser auf die Dateien des Package zugreifen.


Damit dies funktioniert habe ich das Package kompiliert, erzeugt und installiert.

Im VCL-Projekt in den Projektoptionen "Mit Laufzeit-Packages linken" angehakt und den Pfad zur .dpk angegeben.
Weiterhin im VCL-Projekt in den uses die Demo.pas aufgeführt.
Anschließend lässt sich das Projekt kompilieren, starten und ich kann auf den Code aus der Demo.pas zugreifen.
Soweit sogut

Frage 1)
Es ist mir nun nicht möglich mit Taste STRG und Mausklick auf die Demo.pas in den Uses zuzugreifen. Es wird immer gesagt, dass die .pas Datei nicht gefunden werden kann.
Jetzt die Frage: Wenn das Package installiert ist, muss ich dann in dem Suchpfad vom Projekt nochmal den Pfad zu den .pas Dateien angeben?
Das macht aus meiner jetzigen Sicht keinen Sinn, wozu habe in dann das package installiert, wenn ich den Suchpfad im Projekt nochmal separat angeben müsste.

Ich gehe davon aus, dass ein installiertes Package nach der Installation alles zur Verfügung stellt, was nötig ist um es auch nutzen zu können.

Frage 2)
Welchen Unterschied macht es, wenn ich das Package im Debug oder im Release kompiliere?
(Wozu ich Debug und Release in einem Projekt kompiliere ist mir durchaus klar)
Wann und wie greift das Projekt auf die Package.DCU vom Debug und Release zu? Ist das direkt abhängig davon ob ich das Projekt in Release oder Debug kompiliere?


Für ein paar interessante Antworten bin ich sehr dankbar.
Im Netz findet man zwar einiges zu Packages aber so detaillierte Aufführungen habe ich noch nicht gefunden (zumindest verständliche).


Viele Dank und viele Grüße
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 28. Jun 2022, 14:30
Im VCL-Projekt in den Projektoptionen "Mit Laufzeit-Packages linken" angehakt und den Pfad zur .dpk angegeben.
Da gibt es unten eine Liste, wo die zu verwendeten Packages drin stehen müssen (also mindestens rtl, vcl und dein Package), sonst werden sie nicht verwendet und die Dateien direkt in deine EXE einkompiliert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 28. Jun 2022, 15:03
Zu Frage 1:
Ja du musst den Suchpfad ergänzen, damit du sie in der IDE finden kannst, dabei reicht es aber, wenn du diesen nur bei Browsing Path und nicht unbedingt beim Search Path angibst. Die IDE nutzt den Brwosingpfad, als 2. Suche, wenn die Unit im Search Path nicht gefunden wird. Der Compiler im Gegensatz nutzt NUR den Search Pfad, da du aber Packages nutzen willst, braucht der Compiler die PAS Dateien nicht und nutzt stattdessen die DCU im Package. Zur Info: Ein Package ist nichts anderes als eine Sammlung von DCU's.

Nur so als Info: Wenn du allgemeien für externe Komponenten (z.b. 3rd Party) nur die DCU's im Suchpfad hast, kannst du trotzdem die IDE Debug Features nutzen indem du bei Browsing Pfad das Sourcen Verzeichnis mit den pas Dateien angiebst.

Zur Frage 2:
Wenn du das Package in Release kompilierst wird der Code optimiert und bestimmte Debug features funktionieren nicht mehr. Mann kann aber in den Release Compileroptionen im Prinzip die selben Einstellungen nutzen wie im Debugmode, nur mit dem Unterschied, dass Optimization und Asserts ausgeschaltet werden sollten. Der Rest wie "Debug Infos", "Local Symbols" und "Symbol reference info" etc. haben keinen Einfluss auf die Dateigrösse und ich sehe keinen Grund wieso man das für den Release auschalten sollte. Diese Infos werden in den dcu's gespeichert und nicht in der EXE. Dein Package hingegen würde ich daher ohne diese Einstellguneg erstellen, da so sonst dein Package grösser werden dürfte (da eben eine Sammlung von DCU's inkl. dieser Debuginfos). Bei der Erstellung der EXE hingegen können diese Einstellungen aktiv bleiben, damit auch das MAP File viel mehr nützlche Infos enthält, als bei einem reinen Releasebuild ohen dass die EXE grösser wird. Einzig die Einstellung "Debug Information" unter der Einstellung "Linking" wird deine Anwendung massiv aufblasen. Diese Einstellung brauchst du aber weder zum Debugen, noch für den Release Build und sollte in der Regel immer auf AUS stehen.

Wenn du deine Hauptprogramm so erstellst, dass es PAcakges nutzen soll, wird beim Kompilieren dieses Packge (DCU's darin) genutzt, ohen Pacakges werden die DCU's Dateien genutzt.
  Mit Zitat antworten Zitat
SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#4

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 29. Jun 2022, 10:16
Guten Morgen,

Viele Dank für euer Feedback.

Zu Antwort Frage 1)
Wenn ich ein Package installiere, dann ist dieses "Projekt-unabhängig" in der IDE verankert? Das heißt wenn du vom Suchpfad und Browsingpfad sprichst, dann meinst du diese unter Tools -> Optionen? Wobei hier in der deutschen Bezeichnung der Suchpfad der Browsingpfad ist.
Nicht im Projekt unter Optionen?


Zu Antwort Frage 2)
Zum Thema Debug kompilieren:


Folgende Situation:
Ich entwickle mein Projekt in das ich ein Package eingebunden habe. Solange ich mein Projekt entwickle wird dieses im 'Build-Konfiguration (Debug)' kompiliert um debuggen zu können.

Jetzt läuft der Debugger bei gesetzten Breakpoints an die Stelle, die in das Package verzweigt.

Muss das Package nun auch als Debug kompiliert und installiert sein, damit ich im Code vom Package weiter debuggen kann?
Oder ist die Installation unabhängig vom Debug und Release Kompilat?

----------------------------------------------

Zitat:
"Wenn du deine Hauptprogramm so erstellst, dass es PAcakges nutzen soll, wird beim Kompilieren dieses Packge (DCU's darin) genutzt, ohen Pacakges werden die DCU's Dateien genutzt."
Den Teil verstehe ich wiefolgt:
Ich kompiliere mein Hauptprogramm im Release, die DCU Dateien vom Package im Ordner Release werden verwendet.
Im kompiliere das Hauptprogramm im Debug, die DCU Dateien vom Package im Ordner Debug werden verwendet.

Heißt ergo: ich kompiliere und erstelle das Package im Debug und im Release um die DCUs für Debug und Release zu erstellen.
Das Hauptprogramm greift beim kompilieren automatisch auf die Debug oder Release DCUs zu und zwar abhängig von seiner eigenen "Build-Konfigurations" Einstellung.

Wenn das von mir Geschriebene Halbwegs richtig ist, dann habe ich es jetzt verstanden.


Viele Grüße
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 29. Jun 2022, 12:42
Zu Frage 1: Musst du dein Pacakge überhaupt in der IDE installieren? Enthält es Komponenten, die du in der IDE nutzt? Wenn nicht, brauchst du das Package garnicht zu installieren. Dann brauchst du es ja nur zur Runtime. Installieren musst du nur, wenn es irgendwas enhält, das du zur Designzeit nutzen willst. Die Packages kannst du pro Projekt ein/ausschalten. Grundsätzlich ist es aber so, dass es global von Delphi geladen wird, wenn du es über die IDE installierst, kannst es aber später pro Projekt deaktivieren, wenn es nicht benötigt wird, oder du deaktivierst es global und aktivierst es nur in den Projekten wo du es brauchst.

Ja mit Browsingpfad meine ich den Suchpfad im globalen Optionen Dialog. Wenn du das Package für mehrere Projekte nutzen willst, emfiehlt es sich logischerweise dieses im globalen Optionen Dialog zu erfassen, soll es nur für das eine Projekt gelten, gehört es eigentlich besser in die Projektoptionen in den Bibliothekspfad. Genau gleich wie sonstige DCU's die nur für das aktuelle Projekt gelten sollen.

Zur Frage 2: Ja damit du die Sachen im Package debugen kannst, muss es mit Debuginformationen kompiliert sein. Allerdings sollte es da auch so sein, dass die eingeschalteten Debuginfos keine Auswirkung auf die Grösse des Runtime Package (*.BPL) hat, sondern nur das DCP grösser wird. Daher kannst du im Prinzip einfach im Release diese Debuginfos, etc. auch einschalten und musst dann nicht unbedingt eine spezielle Debug Variante kompilieren. Der einzige Unterschied wäre dann aber noch die Optimization und die Asserts, die man unterschiedlich halten kann. Ob du deswegen eine spezielles Release Version erstellen willst, musst du selber entscheiden.

Zum weiteren: Ja du hast es glaube ich verstanden. Wichtig ist nur, dass die DCP Datei (Package DCU-Sammlung benötigt zum compilieren des Projekts) im jeweiligen Bibliothekspfad (Release/Debug) gefunden wird. Die BPL Datei ist übrigens das, was dein Programm zu Runtime nutzt und ist im Prinzip eine spezielle DLL.

Zum Schluss möchte ich dir aber noch sagen, dass ich selber das so nicht nutze und daher nicht zu 100% Sicher bin, ob das alles so genau richtig ist. Wenn ich ein Package compiliere, ist es dazu da neue Komponenten oder IDE Erweiterungen zu installieren. Zur Runtime nutze ich aus Prinzip keine Packages, da man so Bugs in der VCL nicht selber Fixen kann.

Geändert von Rolf Frei (29. Jun 2022 um 12:45 Uhr)
  Mit Zitat antworten Zitat
SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#6

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 30. Jun 2022, 13:28
Du hast jetzt noch ein paar interessante Punkte aufgetan, die ich mir durch den Kopf gehen lassen habe.

Unterschied zwischen installieren und nicht installieren. -> OK
Ausschalten der Packages wenn das Projekt diese nicht benötigt. -> OK

Da bekommt man Kringel im Kopf, wenn man diese ganzen Dateien die da irgendwie und irgendwo erzeugt werden versucht einem sinnvollen Zweck zuzuordnen.


.DCP Datei:
Diese ist das kompilierte Package File und damit wohl der wichtigste Part (neben der .Bpl) bei einem Package Projekt.
Beinhaltet alle DCUs vorkompiliert.
Je nachdem wie das Package kompiliert ist (Release oder Debug) werden die Release oder Debug DCUs da reinkompiliert und das aufrufende Hauptprogramm nimmt das was es bekommt.

.Bpl
Bibliotheksdatei zum Package, was genau beinhaltet diese Bibliothek?


Heißt, wenn dem Hauptprogramm ausschließlich die .DCP und die .BPL Dateien zur Verfügung gestellt werden, dann reicht es aus um mit dem Package zu arbeiten?



.DPK Datei:
ist die Quellcodedatei aus der die .DCP und .BPL erzeugt werden

Alles anderen Dateitypen
.PAS, .DCU, .Res usw. sind nur auf dem Rechner nötig, wenn man das Package auch selber entwickeln möchte.


So in etwas hattest du das auch beschrieben.

Viele Grüße
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 30. Jun 2022, 16:27
Das DCP wird nur zum Compilieren in der IDE benötigt. Dein ausführbares Programm benötigt diese Datei nicht. Da wird die BPL benötigt und diese enthält den binären compilierten Programmcode deines Packages. Das ist wie eine DLL oder eine EXE. Was du aber zur Runtime auf dem Ziel-PC benötigst sind die restlichen Delphi BPL's die von deinem Package benötigt werden. (siehe required Abschnitt im Package Source)

Bin mir nicht ganz sicher ob es möglich ist, den ganzen Kram in ein einziges Package zu kompilieren, das dann aber nicht mehr in der IDE Verwendet werden kann, und dieses dann zur Runtime manuell zu laden. Hier habe ich aber leider keine Erfahrung damit und weiss nicht ob das überhaupt gehen würde, ohne die ganzen Delphi BPL's verwenden zu müssen.
  Mit Zitat antworten Zitat
SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#8

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 1. Jul 2022, 08:44
Dafür das du dich damit nicht so gut auskennst, hast du dennoch ein sehr gutes Verständnis dafür. Ich denke ich habe jetzt, dank deiner Hilfe, alles soweit verstanden.
Viele Dank für die Mühen.

Es ist schon etwas anderes, irgendwas zu programmieren und solange rumzuprobieren bis es irgendwie und irgendwann funktioniert oder alles so zu verstehen, dass man genau weiß was zu tun ist um zum Ziel zu gelangen. Respekt davor

Vielen Dank!
  Mit Zitat antworten Zitat
SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#9

AW: Verständnisfrage zur Package-Entwicklung in Delphi

  Alt 1. Jul 2022, 08:53
Eine Frage vielleicht noch,

wie kommt man an soviel detailliertes Wissen zu diesem Thema. Ist das jahrelange Recherche auf eigene Faust? (und die passende Intelligenz ?)Wenn man sich die ganzen Einstellungen, Parameter, Dateitypen und Inhalte in der IDE anschaut, bin ich immer wieder fasziniert wie manche Programmierer scheinbar irgendwie alles wissen, egal wie abstrakt die Erklärungen dazu auch sind .

Wenn man selber googelt, dann gibt es teilweise soviel Input, der schwer auf einen verständnisvollen Punkt zusammenzuführen ist.

Was ich nicht meine, sind die grundlegenden Programmier-Basics die in jedem Anfängerbuch zu finden sind.

Viele Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:50 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