Rakstot un apkopojot Delphi lietojumprogrammu, parasti tiek ģenerēts izpildāms fails - savrupama Windows lietojumprogramma. Piemēram, atšķirībā no Visual Basic, Delfi ražo lietojumprogrammas, kas iesaiņotas kompaktajos exe failos, bez lielām runtime bibliotēkām (DLL).
Izmēģiniet šo: sāciet Delphi un apkopojiet šo noklusējuma projektu ar vienu tukšu formu, tas radīs izpildāmo failu aptuveni 385 KB (Delphi 2006). Tagad dodieties uz Projekts - Opcijas - Paketes un atzīmējiet izvēles rūtiņu “Veidot ar izpildlaika paketēm”. Apkopo un palaist. Voila, exe lielums tagad ir aptuveni 18 KB.
Pēc noklusējuma izvēles rūtiņa “Veidot ar izpildlaika pakotnēm” nav atzīmēta un katru reizi, kad veidojam Delphi lietojumprogrammu, kompilators sasaista visu kodu, kas jūsu lietojumprogrammai nepieciešams, lai palaistu tieši jūsu lietojumprogrammas izpildāmais fails. Jūsu lietojumprogramma ir savrupa programma, un tai nav nepieciešami nekādi atbalsta faili (piemēram, DLL) - tieši tāpēc Delphi exe ir tik lieli.
Viens radīšanas veids mazākas Delphi programmas ir īsi izmantot “Borland pakešu bibliotēkas” vai BPL priekšrocības.
Kas ir pakete?
īpaša dinamisko saišu bibliotēka, ko izmanto Delphi lietojumprogrammas
Paketes ļauj mums ievietot savas lietojumprogrammas daļas atsevišķos moduļos, kurus var koplietot vairākās lietojumprogrammās. Arī paketes nodrošina līdzekļus (pielāgotu) komponentu instalēšanai Delphi VCL palete.
Tāpēc Delphi pamatā var izgatavot divu veidu paketes:
- Izpildes laika pakotnes - nodrošina funkcionalitāti, kad lietotājs palaiž lietojumprogrammu - tās darbojas līdzīgi kā standarta DLL.
- Projektēšanas laika paketes - tiek izmantotas komponentu instalēšanai Delfu IDE un izveidot īpašus rekvizītus pielāgotajiem komponentiem.
No šī brīža šajā rakstā tiks apskatīts izpildes laika pakotnes un tas, kā tās var palīdzēt Delphi programmētājam.
Viena nepareiza mit: jums nav jābūt a Delphi komponentu izstrādātājs izmantot pakešu priekšrocības. Iesācējiem Delphi programmētājiem jāmēģina strādāt ar pakotnēm - viņi iegūs labāku izpratni par to, kā darbojas pakotnes un Delphi.
Kad un kad nelietojiet iepakojumus
DLL visbiežāk tiek izmantotas kā procedūru un funkciju kolekcijas, kuras var izsaukt citas programmas. Papildus DLL ierakstīšanai ar pielāgotu kārtību, mēs varam ievietot pilnu Delphi veidlapu DLL (piemēram, AboutBox forma). Vēl viena izplatīta metode ir glabāt tikai DLL resursos. Plašāku informāciju par to, kā Delphi darbojas ar DLL, skatiet šajā rakstā: DLL un Delphi.
Pirms turpināt salīdzināšanu starp DLL un BPL, mums ir jāsaprot divi veidi, kā sasaistīt kodu izpildāmajā kodā: statiskā un dinamiskā sasaiste.
Statiskā sasaiste nozīmē, ka, apkopojot Delphi projektu, viss kods, kas nepieciešams jūsu lietojumprogrammai, tiek tieši saistīts ar jūsu lietojumprogrammas izpildāmo failu. Iegūtais exe fails satur visu kodu no visām projektā iesaistītajām vienībām. Pārāk daudz koda, jūs varētu teikt. Pēc noklusējuma jaunu klašu vienību sarakstā izmanto klauzulu, kas satur vairāk nekā 5 vienības (Windows, Messages, SysUtils, ...). Tomēr Delphi savienojums ir pietiekami gudrs, lai saistītu tikai minimālo kodu vienībās, kuras faktiski izmanto projektā. Ar statisko saistīšanu mūsu lietojumprogramma ir savrupa programma, un tai nav vajadzīgas nekādas atbalsta paketes vai DLL (pagaidām aizmirstiet BDE un ActiveX komponentus). Delfā, statiskā sasaiste ir noklusējuma vērtība.
Dinamiska sasaiste ir kā darbs ar standarta DLL. Tas ir, dinamiskā sasaiste nodrošina funkcionalitāti vairākiem lietojumprogrammas, nesaistot kodu tieši katrai programmai - visas nepieciešamās pakotnes tiek ielādētas izpildlaiks. Vislielākā dinamiskās sasaistes lieta ir tā, ka pakotnes automātiski tiek ielādētas jūsu lietojumprogrammā. Jums nav jāraksta kods, lai ielādētu paketes, kā arī nav jāmaina kods.
Vienkārši atzīmējiet izvēles rūtiņu “Veidot ar izpildlaika paketēm”, kas atrodama projektā | Dialoglodziņš Opcijas. Nākamreiz veidojot lietojumprogrammu, projekta kods tiks dinamiski saistīts ar izpildlaika paketēm, nevis ar vienībām, kas statiski saistītas ar jūsu izpildāmo failu.