Statični vs dinamični nalaganje DLL z Delphi

DLL (knjižnica dinamičnih povezav) deluje kot skupna knjižnica funkcij, ki jih lahko prikličejo številne aplikacije in druge DLL-je. Delphi vam omogoča ustvarite in uporabljajte DLL-je da lahko te funkcije pokličete po želji. Vendar morate te rutine uvoziti, preden jih lahko pokličete.

Funkcije, izvožene iz DLL-ja, je mogoče uvoziti na dva načina - bodisi z razglasitvijo zunanjega postopka ali funkcije (statične) bodisi z neposrednimi klici na posebne API-funkcije (dinamične).

Razmislimo o preprosti DLL. Spodaj je koda za "circle.dll", ki izvaža eno funkcijo, imenovano "CircleArea", ki izračuna površino kroga s pomočjo danega polmera:

Ko imate krožek.dll, lahko uporabite izvozno funkcijo "CircleArea" iz svoje aplikacije.

Statično nalaganje

Najpreprostejši način uvoza postopka ali funkcije je, da ga prijavite z zunanjo direktivo:

Če to izjavo vključite v del vmesnika enote, se krožek.dll naloži enkrat, ko se program zažene. Med izvajanjem programa je funkcija CircleArea na voljo vsem enotam, ki uporabljajo enoto, kjer je zgornja deklaracija.

instagram viewer

Dinamično nalaganje

Do rutin v knjižnici lahko dostopate prek neposrednih klicev do API-jev Win32, vključno LoadLibrary, Brezplačna knjižnica, in GetProcAddress. Te funkcije so deklarirane v sistemu Windows.pas.

Takole lahko pokličete funkcijo CircleArea z dinamičnim nalaganjem:

Pri uvozu z dinamičnim nalaganjem se DLL ne naloži do klica v LoadLibrary. Knjižnica neobremenjuje klic v FreeLibrary.

S statičnim nalaganjem se DLL naloži in njegovi inicializacijski odseki se izvršijo, preden se izvedejo inicializacijski odseki klicne aplikacije. To se obrne z dinamičnim nalaganjem.

Bi morali uporabljati statične ali dinamične?

Tu je preprost pogled na prednosti in slabosti statičnega in dinamičnega nalaganja DLL:

Statično nalaganje

Prednosti:

  • Lažje za začetnika razvijalca; ni "grdega" API klici.
  • DLL-ji se ob zagonu programa naložijo samo enkrat.

Slabosti:

  • Aplikacija se ne bo zagnala, če katera koli DLL manjka ali je ni mogoče najti. Pojavi se takšno sporočilo o napaki: "Te aplikacije ni bilo mogoče zagnati, ker ni bilo mogoče najti 'missing.dll'. Ponovna namestitev aplikacije lahko odpravi to težavo ". Načrt iskanja DLL s statičnim povezovanjem vključuje imenik, iz katerega je aplikacija naloženo, sistemski imenik, sistem Windows in imeniki, navedeni v okolju PATH spremenljivka. Upoštevajte tudi, da se lahko iskalni vrstni red razlikuje pri različnih različicah sistema Windows. Vedno pričakujte, da bodo v imeniku, kjer je klicna aplikacija, vsi DLL-ji.
  • Ker se naložijo vse DLL datoteke, se uporablja več pomnilnika, tudi če ne boste uporabljali nekaterih funkcij

Dinamično nalaganje

Prednosti:

  • Program lahko zaženete, tudi če nekatere knjižnice, ki jih uporablja, niso na voljo.
  • Manjša poraba pomnilnika, saj se DLL-ji uporabljajo samo po potrebi.
  • Lahko določite celotno pot do DLL.
  • Lahko se uporablja za modularne aplikacije. Aplikacija izpostavlja samo (obremenitve) module (DLL), "odobrene" za uporabnika.
  • Sposobnost dinamičnega nalaganja in izklapljanja knjižnice je osnova vtičnega sistema, ki razvijalcu omogoča, da programom doda dodatno funkcijo.
  • Kompatibilnost s starejšimi različicami Windows, v katerih sistemski DLL morda ne podpirajo enakih funkcij ali so podprti na enak način. Najprej zaznate različico Windows in nato dinamično povezovanje glede na to, kaj uporablja vaša aplikacija, vam omogoča večjo podporo različice operacijskega sistema Windows in ponujajo rešitve za starejše operacijske sisteme (ali vsaj izredno onemogočene funkcije, ki jih ne morete podpora.)

Slabosti:

  • Zahteva več kode, kar ni vedno enostavno za začetnika razvijalca.
instagram story viewer