Statické vs dynamické načítavanie DLL pomocou Delphi

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.

instagram viewer

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.
instagram story viewer