![]() |
Verständnisfrage zu Laufzeitbibliotheken
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 |
Re: Verständnisfrage zu Laufzeitbibliotheken
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 |
Re: Verständnisfrage zu Laufzeitbibliotheken
Zitat:
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 |
Re: Verständnisfrage zu Laufzeitbibliotheken
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz