AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Packages: Best Practices, Tipps und Tricks

Ein Thema von s.h.a.r.k · begonnen am 8. Jan 2011 · letzter Beitrag vom 1. Mär 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Packages: Best Practices, Tipps und Tricks

  Alt 8. Jan 2011, 20:06
Hallo zusammen,

bin gerade dabei meine eigene Komponentensammlung zusammenzubasteln und diese in Packages zu packen. Nun hab ich schon ein paar Dinge über Packages gefunden, was mir so noch nicht wirklich bewusst war. Daher suche ich im Moment gute Artikel über das Thema, kleine "Geheimnisse", Tipps, Tricks, Best Practices etc.

Nur was stelle ich mir nun aber darunter vor? Ich weiß z.B. im Moment noch nicht so recht, welche Ordnerstruktur ich insgesamt einhalten sollte bzw. was dabei eben sinnvoll und zu beachten ist! Wo sind die Fallstricke versteckt? Ebenso die Dateinamen der Packages? Klar kann ich gegebene Komponenten-Packete anschauen, aber sehe daran nicht die Gründe, warum es so ist, wie es ist. Ein Beispiel:
Zitat von http://mc-computing.com/languages/delphi/Packages.html:
The DCU's made for one version of Delphi won't work in another version.
Wie macht ihr das immer? Habt ihr eine Anleitung? Eine Art Kurzreferenz?

Hier ein paar Links zum Thema:
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Packages: Best Practices, Tipps und Tricks

  Alt 9. Jan 2011, 17:48
Eine Referenz habe ich nicht. Aber dafür einige Jahre Erfahrung (und es waren nicht immer gute )

Folgendes ist dabei herausgekommen:
  • Kein On-Demand-Build ({$IMPLICITBUILD OFF}) ... das bringt mehr Ärger als Nutzen
  • Eine On-Demand-Build-Politik (entweder alle ja oder alle nein)
  • Nutzung des Lib-Suffix für den Package-Namen ... dadurch ist es einfacher, das Package unter mehreren Delphi-Versionen zu nutzen
  • Wenn man das Libsuffix nicht nutzt, dann das Projekt auf jeden Fall mit Delphi-Version benennen (MeinPackage_D120)
  • Die Trennung in Runtime- und Designtime-Package nur wenn es Sinn macht ... also man wirklich Platz spart
  • genutzte DLL's dynamisch laden ... sonst muss Delphi die DLL auch laden

Das wars für den Moment ... wenn mir noch was einfällt, sag ichs.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Packages: Best Practices, Tipps und Tricks

  Alt 10. Jan 2011, 15:19
Na, das ist doch schon mal was

  • Nutzung des Lib-Suffix für den Package-Namen ... dadurch ist es einfacher, das Package unter mehreren Delphi-Versionen zu nutzen
  • Wenn man das Libsuffix nicht nutzt, dann das Projekt auf jeden Fall mit Delphi-Version benennen (MeinPackage_D120)
Was genau verstehst du darunter? Hättest du evtl. ein Beispiel parat, dann wird das wohl alles klarer
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Packages: Best Practices, Tipps und Tricks

  Alt 10. Jan 2011, 18:02
Wenn du ein Package in der IDE als Projekt offen hast, kannst du in den Projekt-Optionen unter Beschreibung ein LIB-Suffix angeben. Nimm mal an, das Package heißt MyPackage.dpk und das LIB-Suffux ist D15, dann wird beim Compilieren eine MyPackage.dcp und eine MyPackageD15.bpl erzeugt. Der Vorteil ist, daß man beim Required in einem davon abhängigen Package dann nur MyPackage angeben muss. Auch kann die DPR relativ leicht an eine neue Delphi-Version angepasst werden, da lediglich das Suffix geändert werden muss. Da BPLs schon mal gern im Suchpfad liegen, müssen sie für jede Delphi-Version einen anderen Namen haben. Das Suffix bewirkt dies, obwohl das Package selbst seinen Namen behält.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Packages: Best Practices, Tipps und Tricks

  Alt 10. Jan 2011, 18:14
Wenn du ein Package in der IDE als Projekt offen hast, kannst du in den Projekt-Optionen unter Beschreibung ein LIB-Suffix angeben. Nimm mal an, das Package heißt MyPackage.dpk und das LIB-Suffux ist D15, dann wird beim Compilieren eine MyPackage.dcp und eine MyPackageD15.bpl erzeugt. Der Vorteil ist, daß man beim Required in einem davon abhängigen Package dann nur MyPackage angeben muss. Auch kann die DPR relativ leicht an eine neue Delphi-Version angepasst werden, da lediglich das Suffix geändert werden muss. Da BPLs schon mal gern im Suchpfad liegen, müssen sie für jede Delphi-Version einen anderen Namen haben. Das Suffix bewirkt dies, obwohl das Package selbst seinen Namen behält.
Ich hab mal versucht, das für ein paar meiner Packages durchzuziehen. Eines davon hat aber ein Third-Party-Package required, das diese LIB-Suffix-Funktionalität nicht nutzt. Also hätte ich je nach Ziel-IDE mal My3rdPartyCompsD11, mal My3rdPartyCompsD12, ... requiren müssen, was ich nicht hingekriegt habe. Wie würdet ihr in so einem Fall vorgehen - ein eigenes Package (mit LIB-Suffix) für die Fremdkomponenten anlegen? Oder gibt's einen Trick, dass es auch mit den Originalpackages klappt?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: Packages: Best Practices, Tipps und Tricks

  Alt 10. Jan 2011, 19:22
Ich hab mal versucht, das für ein paar meiner Packages durchzuziehen. Eines davon hat aber ein Third-Party-Package required, das diese LIB-Suffix-Funktionalität nicht nutzt. Also hätte ich je nach Ziel-IDE mal My3rdPartyCompsD11, mal My3rdPartyCompsD12, ... requiren müssen, was ich nicht hingekriegt habe. Wie würdet ihr in so einem Fall vorgehen - ein eigenes Package (mit LIB-Suffix) für die Fremdkomponenten anlegen? Oder gibt's einen Trick, dass es auch mit den Originalpackages klappt?
Du kannst ein Dummy-Package anlegen, daß das FremdPackage required. Da implizit verwendete Packages nicht angegeben werden müssen, reduziert sich der Änderungsaufwand auf dieses Dummy-Package.

Wenn nicht klar ist, was mit "implizit verwendet" gemeint ist: Benötigt ein Package z.B. RTL und VCL so genügt es lediglich VCL anzugeben, da dieses bereits RTL "implizit verwendet".
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Packages: Best Practices, Tipps und Tricks

  Alt 10. Jan 2011, 19:36
Du kannst ein Dummy-Package anlegen, daß das FremdPackage required. Da implizit verwendete Packages nicht angegeben werden müssen, reduziert sich der Änderungsaufwand auf dieses Dummy-Package.
Danke, probiere ich bei Gelegenheit.

Und wie gibst du das LIB-Suffix konkret an? Ich habe es damals so probiert, wie es Ray Konopka hier beschrieben hat, obwohl das nicht 1:1 geklappt hat - es gab bei mir ähnliche Probleme wie sie Lucian beschreibt, die ich allerdings WIMRE mit einer weiteren Indirektion umgehen konnte.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Packages: Best Practices, Tipps und Tricks

  Alt 11. Jan 2011, 00:12
Und wie gibst du das LIB-Suffix konkret an? Ich habe es damals so probiert, wie es Ray Konopka hier beschrieben hat, obwohl das nicht 1:1 geklappt hat - es gab bei mir ähnliche Probleme wie sie Lucian beschreibt, die ich allerdings WIMRE mit einer weiteren Indirektion umgehen konnte.
Ray benutzt $IFDEFs in der DPR-Datei und hat damit nach eigenen Angaben auch Probleme in der IDE. Mit seinem Build-Batch geht es zwar, man sollte die Packages aber tunlichst nicht in der IDE öffnen.

Ich gebe das LibSuffix in den Projekt-Optionen an, verwende aber eigene Verzeichnisse mit den Projekt-Dateien für die einzelnen Delphi-Versionen. Das ist sowieso kaum zu vermeiden, da z.B. die dproj-Dateien nicht abwärtskompatibel sind. Kommt nun eine neue Delphi-Version heraus, kopiere ich das Verzeichnis der letzten auf das neue, lade die Packages und ändere lediglich das Suffix und eventuell noch den DCU-Pfad. BPL- und DCP-Pfad sind eh auf die Standardwerte gesetzt und sind somit Delphi-Versions-neutral. Ein bißchen blöd ist es, wenn neue Units dazu kommen, da die in allen Delphi-Versionen nachgepflegt werden müssen. Allerdings verwende ich aktiv nicht so viele Versionen und es kommen auch nicht so häufig neue Units dazu.

Eigentlich bräuchte es eine interne Variable für das Suffix, daß vom Compiler gesetzt wird. Aternativ wäre das auch über ein OptionSet denkbar. Gibt's aber alles noch nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Packages: Best Practices, Tipps und Tricks

  Alt 11. Jan 2011, 00:38
Dem stimme ich mehr als zu. Eine Erfahrung von uns: nicht versuchen mit Delphi zu compilieren wenn man viele aufeinander aufbauende packages gleichzeitig in der IDE nutzt. extern compilieren, wir löschen vor dem compieren grundsätzlich alle binaries (dcu, dcp, bpl) da man nie im überblick hat wenn units versehentlich falsch eingebunden sind und dann fehlerhafte dcu eingebunden werden.
compilerdirektiven in dpk's zur abgrenzung unterschiedlicher delphi versionen funktionieren nicht (wie bereits jem. anmerkte)

Eine Referenz habe ich nicht. Aber dafür einige Jahre Erfahrung (und es waren nicht immer gute )

Folgendes ist dabei herausgekommen:
  • Kein On-Demand-Build ({$IMPLICITBUILD OFF}) ... das bringt mehr Ärger als Nutzen
  • Eine On-Demand-Build-Politik (entweder alle ja oder alle nein)
  • Nutzung des Lib-Suffix für den Package-Namen ... dadurch ist es einfacher, das Package unter mehreren Delphi-Versionen zu nutzen
  • Wenn man das Libsuffix nicht nutzt, dann das Projekt auf jeden Fall mit Delphi-Version benennen (MeinPackage_D120)
  • Die Trennung in Runtime- und Designtime-Package nur wenn es Sinn macht ... also man wirklich Platz spart
  • genutzte DLL's dynamisch laden ... sonst muss Delphi die DLL auch laden
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Packages: Best Practices, Tipps und Tricks

  Alt 11. Jan 2011, 20:08
Ja, der Uwe hat das genau richtig erklärt.
Vielleicht noch ein Nachsatz:
Der Umgang Delphis mit BPL's und DCP's ist gut. Daran sollte man (so man nicht der absolute Freak ist) nichts ändern. Also keinen anderen BPL-Pfad oder DCP-Pfad setzen. Einfach an das halten was Delphi von selbst macht ... da hat man die wenigsten Probleme.

Das gilt natürlich nur, wenn es um Delphi-Komponenten geht. Baut man ein eigenes Projekt auf BPL's auf, sollte man sehr wohl diese Pfade selbst definieren.

Btw.: das Lib-Suffix kannst du natürlich auch gern per Compiler-Define in der Projekt-Datei bestimmen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  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 21:46 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