AGB  ·  Datenschutz  ·  Impressum  







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

Verständnisfrage zu Laufzeitbibliotheken

Ein Thema von hanspeter · begonnen am 6. Mär 2010 · letzter Beitrag vom 7. Mär 2010
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Verständnisfrage zu Laufzeitbibliotheken

  Alt 6. Mär 2010, 08:32
Hallo,

mir ist ein Zusammenhang nicht ganz klar, vielleicht kann wer mir auf die Sprünge helfen.
Ich lege eine BPL an. Es entsteht DCU, BPL und DCP.
Verwende ich die BPL direkt in einem Programm interessiert sich der Compiler für dcp und bpl gar nicht.
Er benötigt die DCU und linkt diese direkt in das Projekt.

Gebe ich die BPL jetzt als Laufzeitbibliothek an (und nur diese), dann wird BPL/DCP auch ohne DCU gefunden
und verwendet.
Beim Programmstart wird diese Bibliothek automatisch mit geladen?
Zumindest kann ich in meinem Testprogramm auf Funktionen dieser bpl aus dem Programmcontext heraus zugreifen, ohne das Laden explizit zu veranlassen.
Wenn ich jetzt keine weiteren Laufzeitbibliotheken angebe, welche VCL,rtl u.s.w. verwendet jetzt diese Bibliothek?
Werden die benötigten BPL implizit als Laufzeitbibliotheken geladen oder wird die bereits in das Projekt eingebundene Bibliothek verwendet?


Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

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

Re: Verständnisfrage zu Laufzeitbibliotheken

  Alt 6. Mär 2010, 11:03
Erstmal ein Wort zu den Endungen - da erklärt sich schon manches:

DCU -> Delphi Compiled Unit (eine kompilierte Unit die mal in das Binary gelinkt werden soll)
BPL -> Borland Package Library (von der Sache her eine "normale" DLL deren Exports nach der Delphi-Nomenklatur aufgebaut sind)
DCP -> Delphi Compiled Package (gehört zu einer BPL und beinhaltet die Information, damit die IDE/(der Compiler?) mit dem Package arbeiten kann)

Die DCU kannst du komplett ignorieren.
Die BPL brauchst du zu Entwicklungszeit und wenn du das Programm auslieferst, weil darin der eigentliche Code steckt.
Die DCP brauchst du nur zu Entwicklungszeit, damit die IDE weiß, welche Units, Funktionen, Klassen, ... in der BPL stecken. Die DCP weiß auch wie die BPL heißt.
Deshalb wir in der requires-clause im Projekt auch die DCP angegeben und nicht die BPL.

Welche weiteren Packages nötig sind, stellt der Compiler(?)/die IDE fest. Entweder sagt der Compiler, das er die Unit XYZ implizit einkompiliert hat, was sehr sehr unschön ist, weil es dann irgendwann eine Kollision mit einem Package gibt, das diese Datei auch beinhaltet. Oder die IDE sagt: Ha! Du musst noch folgenden Packages requiren damit es klappt. Das ist der beste Fall
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Verständnisfrage zu Laufzeitbibliotheken

  Alt 6. Mär 2010, 12:04
Zitat von chaosben:
Welche weiteren Packages nötig sind, stellt der Compiler(?)/die IDE fest. Entweder sagt der Compiler, das er die Unit XYZ implizit einkompiliert hat, was sehr sehr unschön ist, weil es dann irgendwann eine Kollision mit einem Package gibt, das diese Datei auch beinhaltet. Oder die IDE sagt: Ha! Du musst noch folgenden Packages requiren damit es klappt. Das ist der beste Fall
Was die Fileendungen bedeuten weis ich schon. Aber genau so wie beschrieben, verhält sich der Compiler leider nicht.
Die requires Anweisung gibt es nur in Packages.

Ich bin gerade dabei mit einem Testprojekt zu basteln, um die Frage selbst zu beantworten
und es ist leider so, wie ich befürchtet habe.

Ich bin inzwischen soweit, das das Package tatsächlich nur im Mode mit Laufzeitbibliothek verwendet wird.
Auch wenn in der Liste nicht angegeben, werden von diesem Package implizit benötigte Packages (z.B. rtl,vcl)
stillschweigend als Laufzeitpackages deklariert und beim Programmstart nachgeladen.

Ist der Schalter Laufzeit nicht gesetzt werden BPL und DCR ignoriert. Der Compiler benötigt dann die in diesem Package enthaltenen DCU.
Es gibt allerdings eine wenig praktikable Ausnahme. Die teste ich gerade.
Wenn das Package als nicht visible Komponente installiert wird, dann verhält sich der Compiler wie erwartet und verwendet nur BPL/DCP.
Es ist aber bestimmt kein guter Programmierstil ( in Delphi) Programmkomponenten als nicht visible Komponenten in der IDE einzubinden.
In den Projekteinstellungen ist es leider nicht möglich projektbezogene Komponenten zu verwenden. (In VS geht das)

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

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

Re: Verständnisfrage zu Laufzeitbibliotheken

  Alt 7. Mär 2010, 17:03
Zitat von hanspeter:
Gebe ich die BPL jetzt als Laufzeitbibliothek an (und nur diese), dann wird BPL/DCP auch ohne DCU gefunden
und verwendet.
Beim Programmstart wird diese Bibliothek automatisch mit geladen?
Ja, weil sie als Laufzeitbibliothek angegeben wurde

Zitat von hanspeter:
Wenn ich jetzt keine weiteren Laufzeitbibliotheken angebe, welche VCL,rtl u.s.w. verwendet jetzt diese Bibliothek?
Die Bibliothek nutzt alle Bibliotheken, die sie braucht. Das siehst du entweder in deren Quellcode (requires) oder per Dependency-Walker.

Zitat von hanspeter:
Werden die benötigten BPL implizit als Laufzeitbibliotheken geladen oder wird die bereits in das Projekt eingebundene Bibliothek verwendet?
Falls die Bibliothek die du nutzt, eine andere Bibliothek braucht, die schon geladen ist, wird die schon geladene genutzt. Wie bei DLL's eben.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  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:06 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