Statiskā vs dinamiskā DLL ielāde ar Delphi

click fraud protection

DLL (Dynamic Link Library) darbojas kā kopīga funkciju bibliotēka, kuru var izsaukt daudzas programmas un citi DLL. Delfi ļauj jums izveidot un izmantot DLL lai jūs varētu izsaukt šīs funkcijas pēc vēlēšanās. Tomēr, pirms varat piezvanīt, šīs kārtības ir jāimportē.

No DLL eksportētās funkcijas var importēt divos veidos - vai nu deklarējot ārēju procedūru vai funkciju (statisku), vai arī izmantojot tiešus izsaukumus uz DLL specifiskām API funkcijām (dinamiskām).

Apsvērsim vienkāršu DLL. Zemāk ir kods "circle.dll", kas eksportē vienu funkciju, ko sauc par "CircleArea" un kas aprēķina apļa laukumu, izmantojot doto rādiusu:

Kad esat ieguvis apli.dll, no savas programmas varat izmantot eksportēto funkciju “CircleArea”.

Statiskā iekraušana

Vienkāršākais procedūras vai funkcijas importēšanas veids ir deklarēt to, izmantojot ārējo direktīvu:

Ja iekļaujat šo deklarāciju vienības saskarnes daļā, aplis.dll tiek ielādēts vienreiz, kad tiek palaista programma. Programmas izpildes laikā CircleArea funkcija ir pieejama visām vienībām, kuras izmanto vienību, kur atrodas iepriekšminētā deklarācija.

instagram viewer

Dinamiska iekraušana

Bibliotēkai var piekļūt, izmantojot tiešos zvanus uz Win32 API, ieskaitot LoadLibrary, Bezmaksas bibliotēka, un GetProcAddress. Šīs funkcijas ir deklarētas sistēmā Windows.pas.

Tālāk parādīts, kā izsaukt funkciju CircleArea, izmantojot dinamisko iekraušanu.

Importējot, izmantojot dinamisko ielādi, DLL netiek ielādēts, līdz tiek izsaukts LoadLibrary. Bibliotēka ir izkrauta zvans uz FreeLibrary.

Ar statisku ielādi tiek ielādēts DLL un tā inicializācijas sekcijas tiek izpildītas pirms zvana lietojumprogrammas inicializācijas sekciju izpildes. Ar dinamisku iekraušanu tas tiek mainīts.

Vai jums vajadzētu izmantot statisku vai dinamisku?

Šeit ir vienkāršs statiskās un dinamiskās DLL ielādēšanas priekšrocību un trūkumu apskats:

Statiskā iekraušana

Plusi:

  • Iesācējam ir vieglāk; nav "neglīts" API zvani.
  • Kad programma tiek startēta, DLL tiek ielādēta tikai vienu reizi.

Mīnusi:

  • Pieteikums netiks startēts, ja trūkst DLL vai tos nevar atrast. Parādīsies šāds kļūdas ziņojums: "Šo lietojumprogrammu neizdevās palaist, jo" missing.dll "netika atrasts. Lietojumprogrammas atkārtota instalēšana var novērst šo problēmu ". Pēc dizaina DLL meklēšanas pasūtījums ar statisku sasaisti ietver direktoriju, no kura programma ielādēts, sistēmas direktorijs, Windows direktorijs un direktorijas, kas uzskaitītas PATH vidē mainīgs. Ņemiet vērā arī to, ka dažādās Windows versijās meklēšanas secība var būt atšķirīga. Vienmēr gaidiet, ka direktorijā, kurā ir izsaukšanas programma, ir visi DLL faili.
  • Vairāk atmiņas tiek izmantots, jo visi DLL tiek ielādēti, pat ja jūs neizmantojat dažas no. Funkcijām

Dinamiska iekraušana

Plusi:

  • Jūs varat palaist savu programmu pat tad, ja dažu izmantoto bibliotēku nav.
  • Mazāks atmiņas patēriņš, jo DLL tiek izmantoti tikai nepieciešamības gadījumā.
  • Jūs varat norādīt pilnu ceļu uz DLL.
  • Var izmantot modulāriem lietojumiem. Lietojumprogramma pakļauj (ielādē) moduļus (DLL), kas ir "apstiprināti" lietotājam.
  • Iespēja dinamiski ielādēt un izkraut bibliotēku ir spraudņu sistēmas pamats, kas izstrādātājam ļauj programmām pievienot papildu funkcionalitāti.
  • Saderība ar atpakaļejošu datumu ar vecākām Windows versijām, kurās sistēmas DLL, iespējams, neatbalsta tās pašas funkcijas vai tiek atbalstītas vienādi. Vispirms atrodot Windows versiju, pēc tam dinamiski sasaistot, ņemot vērā jūsu lietotnes darbību, varat atbalstīt vairāk Windows versijas un nodrošina risinājumus vecākām OS (vai vismaz, graciozi atspējojot funkcijas, kuras nevarat atbalsts.)

Mīnusi:

  • Nepieciešams vairāk koda, kas iesācējiem izstrādātājiem ne vienmēr ir vienkāršs.
instagram story viewer