AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Grund für $LIBVERSION Parameter in *.dpk Dateien?
Thema durchsuchen
Ansicht
Themen-Optionen

Grund für $LIBVERSION Parameter in *.dpk Dateien?

Ein Thema von MaBuSE · begonnen am 21. Jan 2011 · letzter Beitrag vom 24. Jan 2011
Antwort Antwort
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 21. Jan 2011, 17:48
Hallo,
da in der Beschreibung dieses Bereiches "Benutzung und/oder Weiterentwicklung von Komponenten" steht, schreibe ich meine Frage hier rein, obwohl es nichts mit GUI zu tun hat.

Bei der Erstellung von Packages gibt es in der *.dpk Datei die Möglichkeit einen Parameter $LIBVERSION zu setzen. {$LIBVERSION '1.0'} Was diese Option macht, verstehe ich.
In der Delphi Hilfe steht:
Fügt dem Ausgabedateinamen eine zweite Dateinamenserweiterung nach der Erweiterung .bpl hinzu.
Durch die Angabe 2.1.3 für Package1 wird beispielsweise Package1.bpl.2.1.3 generiert.

Aber: Wozu braucht man diese Option?

Borland/CodeGear/Embarcadero verwenden die Option $LIBSUFFIX um die (Delphi-)Version vor das .bpl zu setzen. ({$LIBSUFFIX '150'} )

Kennt jemand die Antwort?

Danke
MaBuSE
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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
 
#2

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 21. Jan 2011, 17:54
Nehmen wir an, wir erstellen ein Runtime-Package MyPackage und das dazugehörige Designtime-Package MyPackageDesign. Das Design-Package required das Runtime-Package.

Erstellt man das Package nun für verschiedene (Delphi-)Versionen, dann müsste man die DPK-Dateien und alles was dazu gehört jedesmal umbenennen (schlecht für die Versionsverwaltung) und bei jedem Umbenennen das requires im Design-Package ändern.

Verwendet man nun das LibSuffix (z.B. "150"), wird aus einer MyPackage.dpk eine MyPackage150.bpl und eine MyPackage.dcp. Damit kann das requires so bleiben, die Projektdateien behalten ihren Namen und die einzige Änderung ist der Eintrag für das LibSuffix.

Mach das Leben deutlich einfacher.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 21. Jan 2011, 18:01
... Verwendet man nun das LibSuffix (z.B. "150"), ... Mach das Leben deutlich einfacher.
Das ist mir bekannt. Das verwende ich schon seit Jahren.

Aber das war ja auch nicht die Frager

Die Frage ist wozu $LIBVERSION ?

mfg
MaBuSE
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 21. Jan 2011, 20:09
Die Frage ist wozu $LIBVERSION?
Hallo,
ich hab mal ein wenig rumprobiert Die Frage kann ich nun selbst beantworten.

Bei der Verwendung der Laufzeit Packages gibt es wie bei den *.dll Dateien (ist ja im Grunde dasselbe) die so genannte dll - Hölle.

Beispiel 1:
Wir haben 2 Anwendungen, die dasselbe Package verwenden. (A1.exe, A2.exe und P.bpl)

Wie kompilieren das Package und die 2 Anwendungen -> alles Super.
Ich installiere die 3 Dateien beim Kunden und programmiere weiter an den neuen Funktionen der 2 Anwendungen.

Nun muss eine Änderung am Package gemacht werden, da in Anwendung 1 ein Bug enthalten ist.
Dieser Bug betrifft aber nur Anwendung 1. Anwendung 2 hat schon neue Funktionalität, die noch nicht ausgeliefert werden soll.

Also kompiliere ich das Package und die Anwendung 1, liefere es meinem Kunden aus und ...

MIST!

Anwendung 1 funktioniert mit dem Package Version 2 super, aber Anwendung 1 nicht.
Anwendung 1 funktioniert nur mit dem alten Package.

Dieses Szenario ist bekannt.
Das ist auch der Grund, warum viele keine Laufzeit Packages einsetzen.
So nun zu $LIBVERSION :

Beispiel2:
Wir haben 2 Anwendungen, die dasselbe Package verwenden. (A1, A2 und P)
Aber im Package haben wir $LIBVERSION auf '1.0.0' gesetzt.
Also wieder alles kompilieren und ausliefern. (A1.exe, A2.exe und P.bpl.1.0.0)

Wir ändern das Package und passen auch $LIBVERSION an ('1.0.1')
Nach dem Kompilieren des Packages und der Anwendung 1 liefern wir folgende Dateien aus:
A1.exe und P.bpl.1.0.1

Beim Kunden liegen nun folgende Dateien im Verzeichnis:
  • A1.exe
  • A2.exe
  • P.bpl.1.0.0
  • P.bpl.1.0.1
Die Anwendung 1 benutzt das neue Package die Anwendung 2 das Alte.

SUPER. Es gibt kein Problem.

Beim Kompilieren der Anwendungen wird immer die neuste Version eingebunden.
Die requires Sektion von Packages muss auch nicht angepasst werden, da die *.dcp Datei ja ohne Versionsnummer ist. (p.dcp)
Schade nur, dass man das $LIBVERSION Tag von Hand pflegen muss. Man hätte es auch an die VERSIONINFO knüpfen können.

Nachteil:
Wenn nun 20 Änderungen des Packages ausgeliefert wurden würden in unserem Beispiel 22 Dateien im Verzeichnis liegen.
Mann muss also genau Buch führen, wann man die alten Versionen nicht mehr benötigt.
Komplizierter wird das bei 50 (teilweise voneinander abhänigigen) Packages und z. B. 20 *.exe Dateien.
Es macht also Sinn, bei einem Major Release (z.B. aus 1.2.17 wird 2.0.0) alle Package und Anwendungen zu kompilieren und die Alten komplett zu entsorgen.

Vorteil:
Es gibt keine Probleme mit falschen Packageversionen.

Fazit:
Eine gute Sache.

Also $LIBPREFIX zum kennzeichnen von Laufzeit und Designtime Packages,
$LIBSUFFIX zum kennzeichnen der Delphi Version (150 -> Delphi XE),
$LIBVERSION zum kennzeichnen der Version des Packages um Versionskonflikten zur Laufzeit aus dem Weg zu gehen.

Danke für's Lesen

mfg
MaBuSE
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 21. Jan 2011, 20:48
[QUOTE=MaBuSE;1076456]
Nachteil:
Wenn nun 20 Änderungen des Packages ausgeliefert wurden würden in unserem Beispiel 22 Dateien im Verzeichnis liegen.
Mann muss also genau Buch führen, wann man die alten Versionen nicht mehr benötigt.
Komplizierter wird das bei 50 (teilweise voneinander abhänigigen) Packages und z. B. 20 *.exe Dateien.
Es macht also Sinn, bei einem Major Release (z.B. aus 1.2.17 wird 2.0.0) alle Package und Anwendungen zu kompilieren und die Alten komplett zu entsorgen.
Da es sich ja um "sharedfiles" handelt, sollte man die im Setup auch mit dem Flag "sharedfile" versehen.
Dadurch werden die diese Dateien erst dann deinstalliert, wenn keine andere Installation diese mehr benötigt.

Somit ist es nur wichtig vernünftige Setups auszuliefern, denn diese kümmern sich um das Aufräumen selber.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 22. Jan 2011, 10:04
Wozu braucht man diese Option?
$LIBVERSION wurde für Linux (Kylix) benötigt, da dort alle SharedObjects (DLL) mit so einer Versionsnummer im Dateinamen verwendet werden. Unter Windows sieht man solche versionierte Dateien nicht so oft. Microsoft zur Lösung dieses Problems side-by-side assemblies (C:\Windows\winsxs) erfunden, bei dem die unterschiedlichen Versionen in unterschiedlichen Ordnern liegen und somit den selben Dateinamen behalten können. Referenziert wird die richtige Version der DLLs dabei über einen Eintrag in der Manifest-Ressource/Datei.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 24. Jan 2011, 10:30
@Sir Rufo: Danke für die Info.

Wozu braucht man diese Option?
$LIBVERSION wurde für Linux (Kylix) benötigt, ...
Danke für die Info. Das würde erklären, warum ich es noch nicht gebraucht habe
Wir verwenden keine Laufzeitpackages um Problemen aus dem Weg zu gehen.
Microsoft zur Lösung dieses Problems side-by-side assemblies (C:\Windows\winsxs) erfunden, bei dem die unterschiedlichen Versionen in unterschiedlichen Ordnern liegen und somit den selben Dateinamen behalten können. Referenziert wird die richtige Version der DLLs dabei über einen Eintrag in der Manifest-Ressource/Datei.
Der Mechanismus ist mir bekannt, auch wenn ich ihn selbst noch nie bewusst benutzt habe.
Funktioniert das auch bei *.bpl Dateien?
Im Grunde sind das ja auch nur *.dll Dateien, die nur eine gewisse Struktur bei den definierten Prozeduren/Funktionen haben. Mal von den Unterschieden wegen Memorymanager, Parameterübergaben ... abgesehen.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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 20:21 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