DLL (Dynamic Link Library) funguje ako zdieľaná knižnica funkcií, ktoré môžu vyvolať početné aplikácie a ďalšie DLL. Delphi vám to umožní vytvárať a používať dll aby ste mohli tieto funkcie volať ľubovoľne. Tieto rutiny však musíte importovať, aby ste ich mohli zavolať.
Funkcie exportované z DLL sa dajú importovať dvoma spôsobmi - buď deklarovaním externej procedúry alebo funkcie (statické) alebo priamym volaním na špecifické API funkcie DLL (dynamické).
Uvažujme o jednoduchej DLL. Nižšie je uvedený kód pre "circle.dll" exportujúci jednu funkciu s názvom "CircleArea", ktorá vypočítava plochu kruhu pomocou daného polomeru:
Akonáhle budete mať circle.dll, môžete použiť exportované "CircleArea" funkcie z vašej aplikácie.
Statické zaťaženie
Najjednoduchším spôsobom importovania postupu alebo funkcie je deklarovanie pomocou externej smernice:
Ak zahrnete toto vyhlásenie do časti rozhrania jednotky, circle.dll sa načíta raz pri spustení programu. Počas celého vykonávania programu je funkcia CircleArea k dispozícii všetkým jednotkám, ktoré používajú jednotku, v ktorej sa nachádza vyššie uvedené vyhlásenie.
Dynamické načítanie
K rutinám v knižnici môžete pristupovať priamym volaním do API Win32, vrátane LoadLibrary, FreeLibrarya GetProcAddress. Tieto funkcie sú deklarované v systéme Windows.pas.
Tu je postup, ako volať funkciu CircleArea pomocou dynamického načítania:
Pri importe pomocou dynamického načítania sa knižnica DLL nenačíta, kým nezvoláte knižnicu LoadLibrary. Knižnica je uvoľnená zavolajte do FreeLibrary.
Pri statickom načítaní sa načíta DLL a jej inicializačné oddiely sa vykonajú pred vykonaním inicializačných sekcií volajúcej aplikácie. Toto je obrátené s dynamickým zaťažením.
Mali by ste používať statické alebo dynamické?
Tu je jednoduchý pohľad na výhody a nevýhody statického aj dynamického načítania DLL:
Statické zaťaženie
Pros:
- Ľahšie pre začínajúcich vývojárov; nie „škaredý“ Hovory API.
- DLL sa načítajú iba raz, keď sa program spustí.
Zápory:
- Aplikácia sa nespustí, ak chýbajú alebo nemôžu byť nájdené žiadne dll. Zobrazí sa chybová správa, ako je táto: „Táto aplikácia sa nespustila, pretože sa nenašiel súbor„ missing.dll “. Tento problém môže vyriešiť opätovná inštalácia aplikácie “. Poradie vyhľadávania DLL so statickým prepojením podľa návrhu obsahuje adresár, z ktorého je aplikácia načítaný, adresár systému, adresár Windows a adresáre uvedené v prostredí PATH variabilné. Upozorňujeme, že poradie vyhľadávania sa môže v rôznych verziách systému Windows líšiť. Vždy očakávajte, že všetky knižnice DLL budú v adresári, v ktorom je volajúca aplikácia.
- Využíva sa viac pamäte, pretože všetky knižnice DLL sa načítajú, aj keď niektoré z týchto funkcií nebudete používať
Dynamické načítanie
Pros:
- Program môžete spustiť aj v prípade, že niektoré použité knižnice nie sú k dispozícii.
- Menšia spotreba pamäte, pretože knižnice DLL sa používajú iba v prípade potreby.
- Môžete zadať úplnú cestu k knižnici DLL.
- Môže byť použitý pre modulárne aplikácie. Aplikácia vystavuje (načíta) moduly (DLL) „schválené“ pre používateľa.
- Schopnosť dynamicky načítať a uvoľniť knižnicu je základom doplnkového systému, ktorý vývojárom umožňuje pridávať do programov ďalšie funkcie.
- Spätná kompatibilita so staršími verziami Windows, v ktorých systémové dll nemusia podporovať rovnaké funkcie alebo sú podporované rovnakým spôsobom. Najprv zistíte verziu systému Windows a potom dynamicky prepojíte na základe toho, na čom je spustená vaša aplikácia, čo vám umožní viac podpory verzie systému Windows a poskytujú zástupné riešenia pre staršie operačné systémy (alebo prinajmenšom pôvabne zakazujúce funkcie, ktoré nemôžete) podpora.)
Zápory:
- Vyžaduje viac kódu, čo nie je vždy ľahké pre začínajúcich vývojárov.