BPL vs. DLL

Wenn wir eine Delphi-Anwendung schreiben und kompilieren, generieren wir normalerweise eine ausführbare Datei - eine eigenständige Windows-Anwendung. Im Gegensatz zu Visual Basic erstellt Delphi beispielsweise Anwendungen, die in kompakten EXE-Dateien verpackt sind, ohne umfangreiche Laufzeitbibliotheken (DLLs)..

Versuchen Sie Folgendes: Starten Sie Delphi und kompilieren Sie das Standardprojekt mit einem leeren Formular. Dadurch wird eine ausführbare Datei mit einer Größe von ca. 385 KB erstellt (Delphi 2006). Gehen Sie nun zu Projekt - Optionen - Pakete und aktivieren Sie das Kontrollkästchen 'Mit Laufzeitpaketen erstellen'. Kompilieren und ausführen. Voila, die exe Größe liegt jetzt bei 18 KB.

Standardmäßig ist die Option "Mit Laufzeitpaketen erstellen" deaktiviert. Bei jeder Erstellung einer Delphi-Anwendung verknüpft der Compiler den gesamten Code, den Ihre Anwendung benötigt, um direkt in die ausführbare Datei Ihrer Anwendung zu gelangen. Ihre Anwendung ist ein eigenständiges Programm und benötigt keine unterstützenden Dateien (wie DLLs) - deshalb sind Delphi-Exes so groß.

Eine Möglichkeit, kleinere Delphi-Programme zu erstellen, besteht darin, die 'Borland-Paketbibliotheken' oder kurz BPLs zu nutzen.

Was ist ein Paket??

Spezielle Dynamic Link Library, die von Delphi-Anwendungen verwendet wird

Mithilfe von Paketen können wir Teile unserer Anwendung in separate Module unterteilen, die von mehreren Anwendungen gemeinsam genutzt werden können. Pakete bieten auch die Möglichkeit, (benutzerdefinierte) Komponenten in Delphis VCL-Palette zu installieren.

Daher kann Delphi grundsätzlich zwei Arten von Paketen erstellen:

  • Laufzeitpakete - bieten Funktionen, wenn ein Benutzer eine Anwendung ausführt - funktionieren ähnlich wie Standard-DLLs.
  • Entwurfszeitpakete - werden zum Installieren von Komponenten in der Delphi-IDE und zum Erstellen spezieller Eigenschafteneditoren für benutzerdefinierte Komponenten verwendet.
Design-Pakete

Von diesem Punkt an wird dieser Artikel Laufzeitpakete behandeln und wie sie Delphi-Programmierern helfen können.

Eins falsch mit: Sie müssen kein Delphi-Komponentenentwickler sein, um die Vorteile von Paketen nutzen zu können. Anfänger Delphi-Programmierer sollten versuchen, mit Paketen zu arbeiten - sie erhalten ein besseres Verständnis für die Funktionsweise von Paketen und Delphi.

Wann und wann nicht Pakete verwenden

DLLs werden am häufigsten als Auflistung von Prozeduren und Funktionen verwendet, die andere Programme aufrufen können. Neben dem Schreiben von DLLs mit benutzerdefinierten Routinen können wir ein vollständiges Delphi-Formular in eine DLL einfügen (z. B. ein AboutBox-Formular). Eine andere übliche Technik besteht darin, nichts als Ressourcen in DLLs zu speichern. Weitere Informationen zur Funktionsweise von Delphi mit DLLs finden Sie in diesem Artikel: DLLs und Delphi.

Bevor wir mit dem Vergleich zwischen DLLs und BPLs fortfahren, müssen wir zwei Möglichkeiten zum Verknüpfen von Code in einer ausführbaren Datei kennen: statische und dynamische Verknüpfungen.

Statische Verknüpfung bedeutet, dass beim Kompilieren eines Delphi-Projekts der gesamte Code, den Ihre Anwendung benötigt, direkt mit der ausführbaren Datei Ihrer Anwendung verknüpft wird. Die resultierende exe-Datei enthält den gesamten Code aller Einheiten, die an einem Projekt beteiligt sind. Zu viel Code, könnte man sagen. Verwendet standardmäßig eine Klausel für eine neue Formulareinheitenliste mit mehr als 5 Einheiten (Windows, Messages, SysUtils,…). Der Delphi-Linker ist jedoch intelligent genug, um nur das Minimum an Code in den Einheiten zu verknüpfen, die tatsächlich von einem Projekt verwendet werden. Mit der statischen Verknüpfung ist unsere Anwendung ein eigenständiges Programm und benötigt keine unterstützenden Pakete oder DLLs (vergessen Sie vorerst die BDE- und ActiveX-Komponenten). In Delphi ist die statische Verknüpfung die Standardeinstellung.

Dynamische Verknüpfung ist wie das Arbeiten mit Standard-DLLs. Das heißt, die dynamische Verknüpfung bietet Funktionen für mehrere Anwendungen, ohne den Code direkt an jede Anwendung zu binden - alle erforderlichen Pakete werden zur Laufzeit geladen. Das Beste an der dynamischen Verknüpfung ist, dass das Laden von Paketen durch Ihre Anwendung automatisch erfolgt. Sie müssen weder Code schreiben, um die Pakete zu laden, noch müssen Sie Ihren Code ändern.

Aktivieren Sie einfach das Kontrollkästchen 'Mit Laufzeitpaketen erstellen' im Bereich Projekt | Dialogfeld "Optionen". Wenn Sie das nächste Mal Ihre Anwendung erstellen, wird der Code Ihres Projekts dynamisch mit Laufzeitpaketen verknüpft, anstatt dass Einheiten statisch in Ihre ausführbare Datei eingebunden werden.