Wanneer we een Delphi-applicatie schrijven en compileren, genereren we meestal een uitvoerbaar bestand - een zelfstandige Windows-applicatie. In tegenstelling tot bijvoorbeeld Visual Basic, Delphi produceert toepassingen verpakt in compacte exe-bestanden, zonder omvangrijke runtime-bibliotheken (DLL's).
Probeer dit: start Delphi en compileer dat standaardproject met één leeg formulier, dit zal een uitvoerbaar bestand van ongeveer 385 KB opleveren (Delphi 2006). Ga nu naar Project - Opties - Pakketten en vink het selectievakje 'Bouwen met runtime-pakketten' aan. Compileer en voer uit. Voila, de exe-grootte is nu ongeveer 18 KB.
Standaard is 'Build with runtime packages' niet aangevinkt en elke keer dat we een Delphi-applicatie maken, koppelt de compiler alle code die uw applicatie nodig heeft om rechtstreeks in uw uitvoerbare bestand van de toepassing. Uw applicatie is een op zichzelf staand programma en vereist geen ondersteunende bestanden (zoals DLL's) - daarom zijn de exo's van Delphi zo groot.
Een manier om te creëren kleinere Delphi-programma's is om te profiteren van 'Borland pakketbibliotheken' of BPL's in het kort.
Wat is een pakket?
speciale Dynamic-Link-bibliotheek gebruikt door Delphi-toepassingen
Met pakketten kunnen we delen van onze applicatie in afzonderlijke modules plaatsen die kunnen worden gedeeld over meerdere applicaties. Pakketten bieden ook een manier om (aangepaste) componenten in Delphi's VCL-palet te installeren.
Daarom kan Delphi in principe twee soorten pakketten maken:
- Runtime-pakketten - bieden functionaliteit wanneer een gebruiker een applicatie uitvoert - ze werken net als standaard DLL's.
- Ontwerptijdpakketten - gebruikt om componenten in de Delphi IDE en om speciale property-editors te maken voor aangepaste componenten.
Vanaf dit punt behandelt dit artikel runtime-pakketten en hoe ze Delphi-programmeur kunnen helpen.
Een verkeerde mit: u hoeft geen Delphi componentontwikkelaar om te profiteren van pakketten. Beginnende Delphi-programmeurs zouden moeten proberen met pakketten te werken - ze zullen beter begrijpen hoe pakketten en Delphi werken.
Wanneer en wanneer geen pakketten gebruiken
DLL's worden het meest gebruikt als verzameling procedures en functies die andere programma's kunnen oproepen. Naast het schrijven van DLL's met aangepaste routines, kunnen we een compleet Delphi-formulier in een DLL plaatsen (bijvoorbeeld een AboutBox-formulier). Een andere veel voorkomende techniek is om alleen bronnen in DLL's op te slaan. Meer informatie over hoe Delphi werkt met DLL's vindt u in dit artikel: DLL's en Delphi.
Voordat we doorgaan met het vergelijken van DLL's en BPL's, moeten we twee manieren begrijpen om code in een uitvoerbaar bestand te koppelen: statische en dynamische koppeling.
Statische koppeling betekent dat wanneer een Delphi-project wordt gecompileerd, alle code die uw toepassing nodig heeft, rechtstreeks is gekoppeld aan het uitvoerbare bestand van uw toepassing. De resulterende exe bestand bevat alle code van alle eenheden die betrokken zijn bij een project. Te veel code, zou je kunnen zeggen. Standaard gebruikt clausule voor een nieuwe lijst met formuliereenheden van meer dan 5 eenheden (Windows, Berichten, SysUtils, ...). De Delphi linker is echter slim genoeg om alleen het minimum aan code te koppelen in de eenheden die daadwerkelijk door een project worden gebruikt. Met statische koppeling is onze applicatie een stand-alone programma en vereist het geen ondersteunende pakketten of DLL's (vergeet voorlopig BDE- en ActiveX-componenten). In Delphi, statische koppeling is de standaard.
Dynamische koppeling is als werken met standaard DLL's. Dat wil zeggen, dynamische koppeling biedt functionaliteit aan meerdere toepassingen zonder de code rechtstreeks aan elke toepassing te binden - alle vereiste pakketten worden geladen op looptijd. Het grootste voordeel van dynamisch linken is dat het laden van pakketten door uw applicatie automatisch gaat. U hoeft geen code te schrijven om de pakketten te laden en u hoeft ook uw code niet te wijzigen.
Vink het selectievakje 'Build with runtime packages' aan in het Project | Dialoogvenster Opties. De volgende keer dat u uw applicatie bouwt, wordt de code van uw project dynamisch gekoppeld aan runtime-pakketten in plaats van dat eenheden statisch worden gekoppeld aan uw uitvoerbare bestand.