Når vi skriver og kompilerer et Delphi-program, genererer vi typisk en eksekverbar fil - et uafhængigt Windows-program. I modsætning til Visual Basic, for eksempel, Delphi producerer applikationer indpakket i kompakte exe-filer uden behov for voluminøse runtime-biblioteker (DLL'er).
Prøv dette: start Delphi og kompilér dette standardprojekt med en tom form, dette vil producere en eksekverbar fil på ca. 385 KB (Delphi 2006). Gå nu til Projekt - Valg - Pakker, og marker afkrydsningsfeltet 'Byg med runtime-pakker'. Kompilér og kør. Voila, exe-størrelsen er nu omkring 18 KB.
Som standard er 'Byg med runtime-pakker' ikke afkrydset, og hver gang vi opretter en Delphi-applikation, sammenstiller compileren al den kode, din applikation har brug for, for at køre direkte til din applikationens eksekverbare fil. Din ansøgning er et selvstændigt program og kræver ikke nogen understøttende filer (som DLLs) - det er grunden til, at Delphi exe er så store.
En måde at skabe på mindre Delphi-programmer er at drage fordel af 'Borland-pakkebiblioteker' eller BPL'er kort sagt.
Hvad er en pakke?
specielt dynamisk-link-bibliotek brugt af Delphi-applikationer
Pakker gør det muligt for os at placere dele af vores applikation i separate moduler, der kan deles på tværs af flere applikationer. Pakker giver også et middel til at installere (brugerdefinerede) komponenter i Delphis VCL-pallete.
Derfor kan dybest set to typer pakker fremstilles af Delphi:
- Run-time-pakker - giver funktionalitet, når en bruger kører et program - de fungerer meget som standard-DLL'er.
- Designtidspakker - bruges til at installere komponenter i Delphi IDE og at oprette specielle egenskabsredaktører til brugerdefinerede komponenter.
Fra dette tidspunkt behandler denne artikel runtime-pakker, og hvordan de kan hjælpe Delphi-programmerer.
En forkert mit: du skal ikke være en Delphi-komponentudvikler at drage fordel af pakker. Begynder Delphi-programmører bør prøve at arbejde med pakker - de får bedre forståelse af, hvordan pakker og Delphi fungerer.
Hvornår og når ikke Brug pakker
DLL'er bruges oftest som samlinger af procedurer og funktioner, som andre programmer kan kalde. Udover at skrive DLL'er med brugerdefinerede rutiner, kan vi placere en komplet Delphi-form i en DLL (for eksempel en AboutBox-form). En anden almindelig teknik er at gemme andet end ressourcer i DLLs. Flere oplysninger om, hvordan Delphi fungerer med DLLs, finder du i denne artikel: DLLs og Delphi.
Før vi går videre til sammenligning mellem DLL'er og BPL'er, skal vi forstå to måder at linke kode i en eksekverbar: statisk og dynamisk linking.
Statisk sammenkobling betyder, at når et Delphi-projekt er samlet, er al den kode, som din ansøgning kræver, direkte knyttet til din applikations eksekverbare fil. Den resulterende ekse filen indeholder al koden fra alle de enheder, der er involveret i et projekt. For meget kode, siger du måske. Brug som standard klausul til en ny formularenhedsliste med mere end 5 enheder (Windows, Meddelelser, SysUtils, ...). Delphi-linkeren er imidlertid smart nok til kun at forbinde minimumskoden i de enheder, der faktisk bruges af et projekt. Med statisk sammenkobling er vores applikation et selvstændigt program og kræver ingen understøttende pakker eller DLL'er (glem BDE- og ActiveX-komponenter i øjeblikket). I Delphi, statisk sammenkobling er standard.
Dynamisk sammenkobling er som at arbejde med standard DLLs. Det vil sige, dynamisk linking giver funktionalitet til flere applikationer uden at binde koden direkte til hver applikation - eventuelle nødvendige pakker indlæses kl runtime. Den største ting ved dynamisk linking er, at indlæsning af pakker ved din applikation er automatisk. Du behøver ikke at skrive kode for at indlæse pakkerne, og du behøver heller ikke at ændre din kode.
Marker blot afkrydsningsfeltet 'Byg med runtime-pakker' i projektet | Indstillinger dialogboks. Næste gang du bygger din applikation, vil dit projekts kode blive linket dynamisk til runtime-pakker i stedet for at have enheder, der er statisk knyttet til din eksekverbare fil.