Statinis ir dinaminis DLL įkėlimas naudojant „Delphi“

DLL (Dynamic Link Library) veikia kaip bendra funkcijų biblioteka, į kurią gali kreiptis daugybė programų ir kitų DLL. Delphi leidžia kurti ir naudoti DLL kad galėtumėte iškviesti šias funkcijas. Tačiau prieš pradėdami skambinti, turite importuoti šias procedūras.

Iš DLL eksportuotas funkcijas galima importuoti dviem būdais - deklaruojant išorinę procedūrą ar funkciją (statinė) arba tiesiogiai skambinant į specifines DLL funkcijas (dinamines).

Panagrinėkime paprastą DLL. Žemiau yra kodas „kör.dll“, eksportuojantis vieną funkciją, vadinamą „CircleArea“, kuri apskaičiuoja apskritimo plotą pagal nurodytą spindulį:

Kai turėsite apskritimą.dll, galėsite naudoti eksportuotą „CircleArea“ funkciją iš savo programos.

Statinis krovimas

Paprasčiausias būdas importuoti procedūrą ar funkciją yra deklaruoti ją naudojant išorinę direktyvą:

Jei įtraukiate šią deklaraciją į įrenginio sąsajos dalį, apskritimas.dll įkeliamas vieną kartą, kai paleidžiama programa. Vykdant programą, „CircleArea“ funkcija prieinama visiems vienetams, kurie naudoja vienetą, kur yra aukščiau pateikta deklaracija.

instagram viewer

Dinaminis krovimas

Galite pasiekti kasdienybę bibliotekoje naudodami tiesioginius skambučius į „Win32“ API, įskaitant „LoadLibrary“, „FreeLibrary“ir „GetProcAddress“. Šios funkcijos yra deklaruotos „Windows.pas“.

Štai kaip paskambinti „CircleArea“ funkcijai naudojant dinaminį krovimą:

Importuojant naudojant dinaminį įkėlimą, DLL neįkeliamas iki skambučio į „LoadLibrary“. Biblioteka iškraunama skambinkite į „FreeLibrary“.

Esant statiniam įkrovimui, DLL yra įkeliamas, o jo inicializacijos skyriai vykdomi prieš pradedant skambučio programos inicializacijos sekcijas. Dinaminio krovimo metu tai pasikeičia.

Ar turėtumėte naudoti statinį ar dinaminį?

Čia yra paprastas žvilgsnis į tiek statinio, tiek dinaminio DLL įkėlimo pranašumus ir trūkumus:

Statinis krovimas

Argumentai už:

  • Lengviau pradedančiajam kūrėjui; nėra "negraži" API skambučiai.
  • Paleidus programą, DLL įkeliami tik vieną kartą.

Minusai:

  • Taikomoji programa nebus paleista, jei trūksta DLL arba jos negalima rasti. Atsiras toks klaidos pranešimas: "Nepavyko paleisti šios programos, nes 'missing.dll' nerasta. Iš naujo įdiegę programą gali išspręsti šią problemą “. Pagal dizainą, DLL paieškos tvarka su statiniu susiejimu apima katalogą, iš kurio programa įkeltas, sistemos katalogas, „Windows“ katalogas ir PATH aplinkoje išvardyti katalogai kintamasis. Taip pat atminkite, kad įvairiose „Windows“ versijose paieškos tvarka gali skirtis. Visada tikėkitės, kad visi DLL yra kataloge, kuriame yra skambinimo programa.
  • Naudojama daugiau atminties, nes visi DLL yra įkeliami, net jei nenaudosite kai kurių .funkcijų

Dinaminis krovimas

Argumentai už:

  • Galite paleisti programą net tada, kai nėra kai kurių jos naudojamų bibliotekų.
  • Mažesnės atminties sąnaudos, nes DLL naudojami tik tada, kai to reikia.
  • Galite nurodyti visą kelią į DLL.
  • Gali būti naudojamas modulinėms programoms. Programa atskleidžia (įkelia) vartotojui „patvirtintus“ modulius (DLL).
  • Galimybė dinamiškai įkelti ir iškrauti biblioteką yra papildinio sistemos, leidžiančios kūrėjui pridėti papildomų programų funkcijas, pagrindas.
  • Atgalinis suderinamumas su senesnėmis „Windows“ versijomis, kuriose sistemos DLL gali nepalaikyti tų pačių funkcijų arba būti palaikomos vienodai. Pirmiausia aptikę „Windows“ versiją, tada dinamiškai susiedami pagal tai, kokia jūsų programa veikia, galite palaikyti daugiau „Windows“ versijas ir suteikia galimybę išspręsti senesnes operacines sistemas (arba bent jau maloniai išjungti funkcijas, kurių negalite palaikymas.)

Minusai:

  • Reikia daugiau kodo, o tai ne visada lengva pradedantiesiems kūrėjams.