DLL (Dynamic Link Library) toimib jagatud funktsioonide raamatukoguna, mida saavad kasutada arvukad rakendused ja muud DLL-id. Delphi laseb sul luua ja kasutada DLL-e et saaksite neid funktsioone soovi korral helistada. Enne helistamist peate need rutiinid siiski importima.
DLL-ist eksporditud funktsioone saab importida kahel viisil - kas välise protseduuri või funktsiooni deklareerimisega (staatiline) või otse DLL-spetsiifilistele API funktsioonidele kutsumisega (dünaamiline).
Vaatleme lihtsat DLL-i. Allpool on kood "ring.dll", mis eksportib ühte funktsiooni, mida nimetatakse "CircleArea" ja mis arvutab ringi pindala antud raadiuse abil:
Kui teil on ring.dll, saate oma rakendusest kasutada eksporditud funktsiooni "CircleArea".
Staatiline laadimine
Lihtsaim viis protseduuri või funktsiooni importimiseks on selle deklareerimine välisdirektiivi abil:
Kui lisate selle deklaratsiooni ühiku liidese ossa, laaditakse ring.dll programmi käivitamisel üks kord. Programmi täitmise ajal on funktsioon CircleArea saadaval kõikidele üksustele, mis kasutavad seadet, kus ülaltoodud deklaratsioon on.
Dünaamiline laadimine
Teekide rutiinidele pääsete juurde Win32 API-de, sealhulgas otsekõnede kaudu LoadLibrary, FreeLibraryja GetProcAddress. Need funktsioonid on deklareeritud Windows.pas-is.
Funktsiooni CircleArea helistamiseks, kasutades dünaamilist laadimist, toimige järgmiselt.
Dünaamilise laadimisega importimisel laaditakse DLL alles enne LoadLibrary helistamist. Raamatukogu laadib välja helistage FreeLibrarysse.
Staatilise laadimisega laaditakse DLL ja selle initsialiseerimissektsioonid käivitatakse enne helistava rakenduse initsialiseerimissektsioonide käivitamist. Dünaamilise laadimisega on see vastupidine.
Kas peaksite kasutama staatilist või dünaamilist?
Siin on lihtne ülevaade nii staatilise kui ka dünaamilise DLL-i laadimise eelistest ja puudustest:
Staatiline laadimine
Plussid:
- Lihtsam algajale arendajale; pole "kole" API-kõned.
- DLL laaditakse programmi käivitamisel vaid üks kord.
Miinused:
- Rakendust ei käivitata, kui puuduvad DLL-id või neid ei leita. Ilmub selline tõrketeade: "Selle rakenduse käivitamine ebaõnnestus, kuna 'missing.dll' ei leitud. Rakenduse uuesti installimine võib selle probleemi lahendada ". Kujunduslikult sisaldab staatilise linkimisega DLL-i otsingukorraldus kataloogi, kust rakendus asub laaditud, süsteemikataloog, Windowsi kataloog ja PATH-keskkonnas loetletud kataloogid muutuja. Pange tähele ka seda, et otsingu järjekord võib erinevates Windowsi versioonides erineda. Alati oodake, et kõik DLL-id oleksid kataloogis, kus helistav rakendus asub.
- Kasutatakse rohkem mälu, kuna kõik DLL-id laaditakse isegi siis, kui te mõnda .funktsiooni ei kasuta
Dünaamiline laadimine
Plussid:
- Saate oma programmi käivitada ka siis, kui mõnda tema kasutatavat teeki pole.
- Väiksem mälukasutus, kuna DLL-faile kasutatakse ainult vajaduse korral.
- Saate määrata täieliku tee DLL-i.
- Saab kasutada moodulrakenduste jaoks. Rakendus paljastab (laadib) ainult kasutaja jaoks "heaks kiidetud" moodulid (DLL).
- Võimalus raamatukogu dünaamiliselt laadida ja maha laadida on pistikprogrammisüsteemi alus, mis võimaldab arendajal programmidele lisafunktsioone lisada.
- Ühilduvus tagasi vanemate Windowsi versioonidega, kus süsteemi DLL-id ei pruugi toetada samu funktsioone või olla toetatud samal viisil. Esmalt Windowsi versiooni tuvastamine ja seejärel dünaamiline linkimine vastavalt teie rakendusele töötab, võimaldab teil rohkem toetada Windowsi versioonid ja pakuvad lahendusi vanematele OS-dele (või vähemalt selliste funktsioonide nõtkeks keelamiseks, mida te ei saa) toetus.)
Miinused:
- Nõuab rohkem koodi, mis pole algajale arendajale alati lihtne.