Staattinen vs. dynaaminen DLL-lataus Delphin avulla

DLL (Dynamic Link Library) toimii jaettuna kirjasto-funktioina, joihin voidaan vedota lukuisissa sovelluksissa ja muissa DLL-tiedostoissa. Delphi antaa sinulle luoda ja käyttää DLL-tiedostoja jotta voit soittaa näihin toimintoihin haluttaessa. Sinun on kuitenkin tuotava nämä rutiinit ennen kuin voit soittaa niihin.

DLL-tiedostosta viedyt toiminnot voidaan tuoda kahdella tavalla - joko ilmoittamalla ulkoinen menettely tai toiminto (staattinen) tai suorilla kutsuilla DLL-erityisiin API-toimintoihin (dynaaminen).

Tarkastellaan yksinkertaista DLL-tiedostoa. Alla on koodi "ympyrä.dll", joka viedään yksi toiminto, nimeltään "CircleArea", joka laskee ympyrän pinta-alan annetun säteen avulla:

Kun sinulla on ympyrä.dll, voit käyttää viedtyä "CircleArea" -toimintoa sovelluksestasi.

Staattinen lastaus

Yksinkertaisin tapa tuoda menettely tai toiminto on ilmoittaa se käyttämällä ulkoista direktiiviä:

Jos sisällytät tämän ilmoituksen yksikön käyttöliittymän osaan, ympyrä.dll ladataan kerran ohjelman käynnistyessä. CircleArea-toiminto on käytettävissä koko ohjelman suorittamisen ajan kaikille yksiköille, jotka käyttävät yksikköä, missä yllä oleva ilmoitus on.

instagram viewer

Dynaaminen lataus

Voit käyttää kirjaston rutiineja suorilla puheluilla Win32-sovellusliittymille, mukaan lukien LoadLibrary, FreeLibraryja GetProcAddress. Nämä toiminnot on ilmoitettu Windows.pas-järjestelmässä.

Näin soitat CircleArea-toimintoon dynaamista lastausta käyttämällä:

Kun tuodaan dynaamisella latauksella, DLL ladataan vasta, kun puhelu LoadLibrary: iin. Kirjasto purkaa soita FreeLibrary: iin.

Staattisella latauksella DLL ladataan ja sen alustusosat suoritetaan ennen kutsuvan sovelluksen alustusosien suorittamista. Tämä käännetään dynaamisella kuormituksella.

Pitäisikö sinun käyttää staattista tai dynaamista?

Tässä on yksinkertainen katsaus sekä staattisen että dynaamisen DLL-latauksen etuihin ja haitoihin:

Staattinen lastaus

Plussat:

  • Helppoa aloittelijalle kehittäjälle; ei "ruma" API-puhelut.
  • DLL-tiedostot ladataan vain kerran, kun ohjelma käynnistyy.

Haittoja:

  • Sovellus ei käynnisty, jos jokin DLL puuttuu tai sitä ei löydy. Näyttöön tulee tällainen virhesanoma: "Sovellus ei avautunut, koska 'missing.dll' ei löydy. Sovelluksen uudelleenasentaminen voi korjata ongelman ". Suunnittelussa DLL-hakutilaus staattisella linkityksellä sisältää hakemiston, josta sovellus ladattu, järjestelmähakemisto, Windows-hakemisto ja PATH-ympäristössä luetellut hakemistot muuttuja. Huomaa myös, että hakujärjestys voi olla erilainen eri Windows-versioissa. Odota aina, että kaikki DLL-tiedostot ovat hakemistossa, jossa kutsuva sovellus on.
  • Lisää muistia käytetään, koska kaikki DLL-tiedostot ladataan, vaikka et käyttäisi joitain .functions -toiminnoista

Dynaaminen lataus

Plussat:

  • Voit suorittaa ohjelman, vaikka joitain sen käyttämistä kirjastoista ei olisi.
  • Pienempi muistin kulutus, koska DLL-tiedostoja käytetään vain tarvittaessa.
  • Voit määrittää koko polun DLL: ään.
  • Voidaan käyttää modulaarisiin sovelluksiin. Sovellus paljastaa (lataa) vain käyttäjän hyväksymät moduulit (DLL).
  • Mahdollisuus ladata ja purkaa kirjasto dynaamisesti, on perusta plug-in-järjestelmälle, jonka avulla kehittäjä voi lisätä ylimääräisiä toimintoja ohjelmiin.
  • Yhteensopivuus taaksepäin vanhempien Windows-versioiden kanssa, joissa järjestelmän DLL-tiedostot eivät välttämättä tue samoja toimintoja tai niitä tuetaan samalla tavalla. Windows-version havaitseminen ensin ja linkittäminen dynaamisesti sovelluksesi käyttämisen perusteella antaa sinulle mahdollisuuden tukea enemmän Windows-versioita ja tarjoavat kiertotavan vanhemmille käyttöjärjestelmille (tai ainakin sille, että poistat ominaisuudet käytöstä, joita et voi tuki.)

Haittoja:

  • Vaatii lisää koodia, mikä ei ole aina helppoa aloittelijoille.