Statični vs dinamični DLL učitavanje s Delphi

DLL (knjižnica dinamičkih veza) djeluje kao zajednička knjižnica funkcija na koje se mogu pozivati ​​brojne aplikacije i druge DLL datoteke. Delphi vam dopušta stvorite i koristite DLL datoteke tako da ove funkcije možete nazvati po volji. No, morate uvesti te rutine prije nego što ih možete pozvati.

Funkcije izvezene iz DLL-a mogu se uvesti na dva načina - ili proglašavanjem vanjske procedure ili funkcije (statičke) ili izravnim pozivima na DLL specifične API funkcije (dinamičke).

Razmotrimo jednostavan DLL. Ispod je kôd za "circle.dll" koji izvozi jednu funkciju, pod nazivom "CircleArea", a koja izračunava područje kruga pomoću zadanog radijusa:

Jednom kada imate circle.dll, možete koristiti izvoznu funkciju "CircleArea" iz svoje aplikacije.

Statično učitavanje

Najjednostavniji način uvoza procedure ili funkcije je deklariranje pomoću vanjske direktive:

Ako ovu izjavu uključite u dio sučelja jedinice, circle.dll se učitava jednom kad se pokrene program. Tijekom izvođenja programa, funkcija CircleArea dostupna je svim jedinicama koje koriste jedinicu na kojoj se nalazi gornja deklaracija.

instagram viewer

Dinamičko učitavanje

Možete pristupiti rutini u biblioteci izravnim pozivima na Win32 API-je, uključujući LoadLibrary, FreeLibrary, i GetProcAddress. Ove se funkcije deklariraju u Windows.pasu.

Evo kako nazvati funkciju CircleArea koristeći dinamičko učitavanje:

Pri uvozu pomoću dinamičkog učitavanja DLL se ne učitava sve do poziva u LoadLibrary. Knjižnica je istovarila poziv u FreeLibrary.

Statičkim učitavanjem učitava se DLL i izvršavaju se njegovi sekcije za pokretanje prije nego što se izvrše odjeljci za pokretanje pozivne aplikacije. Ovo se obrne dinamičkim opterećenjem.

Treba li koristiti statički ili dinamički?

Evo jednostavnog pregleda prednosti i nedostataka statičkog i dinamičkog DLL učitavanja:

Statično učitavanje

Pros:

  • Lakše za početnika programera; ne "ružno" API pozivi.
  • DLL-ovi se učitavaju samo jednom, kada se pokrene program.

Cons:

  • Aplikacija se neće pokrenuti ako nedostaje bilo koji DLL ili ga nije moguće pronaći. Pojavit će se poruka o pogrešci poput ove: "Aplikacija se nije pokrenula jer nije pronađena 'nedostaje.dll'. Ponovna instalacija aplikacije može riješiti ovaj problem ". Prema dizajnu, DLL nalog za pretraživanje sa statičkim povezivanjem uključuje direktorij iz kojeg je aplikacija učitava, sistemski direktorij, Windows direktorij i mape navedene u PATH okruženju promjenjiva. Imajte na umu da bi se redoslijed pretraživanja mogao razlikovati za različite verzije sustava Windows. Uvijek očekujte da sve DLL datoteke postoje u direktoriju u kojem se zove aplikacija.
  • Upotrebljava se više memorije jer su učitani svi DLL-ovi, čak i ako nećete koristiti neke funkcije

Dinamičko učitavanje

Pros:

  • Program možete pokrenuti čak i kad neke knjižnice koje koristi nisu prisutne.
  • Manja potrošnja memorije jer se DLL-ovi koriste samo po potrebi.
  • Možete odrediti puni put do DLL-a.
  • Može se koristiti za modularne aplikacije. Aplikacija izlaže samo (opterećenja) module (DLL-ove) "odobrene" za korisnika.
  • Sposobnost dinamičkog učitavanja i istovara knjižnice temelj je dodatnog sustava koji programeru omogućuje dodavanje dodatne funkcionalnosti programima.
  • Povratna kompatibilnost sa starijim verzijama sustava Windows u kojima DLL-ovi sustava možda ne podržavaju iste funkcije ili ih podržavaju na isti način. Prvo otkrivanje verzije sustava Windows, a zatim dinamično povezivanje na temelju onoga na čemu se pokreće vaša aplikacija, omogućuje vam veću podršku verzije sustava Windows i pružaju zaokret za starije OS-ove (ili u najmanju ruku graciozno deaktiviranje značajki koje ne možete podršku).

Cons:

  • Zahtijeva više koda, što nije uvijek lako početniku programeru.