Încărcare statică și dinamică a bibliotecilor de legături dinamice

O DLL (Dynamic Link Library) acționează ca o bibliotecă partajată de funcții care pot fi apelate la numeroase aplicații și alte DLL-uri. Delphi vă permite să creați și să utilizați DLL-uri, astfel încât să puteți apela aceste funcții după bunul plac. Cu toate acestea, trebuie să importați aceste rutine înainte de a le putea suna.

Funcțiile exportate dintr-un DLL pot fi importate în două moduri - fie prin declararea unei proceduri sau funcții externe (statice), fie prin apeluri directe către funcțiile API specifice DLL (dinamice).

Să luăm în considerare un simplu DLL. Mai jos este codul pentru "cerc.dll" care exportă o funcție, numită "CircleArea", care calculează aria unui cerc folosind raza dată:

După ce aveți circular.dll, puteți utiliza funcția "CircleArea" exportată din aplicația dvs..

Încărcare statică

Cel mai simplu mod de a importa o procedură sau o funcție este de a o declara folosind directiva externă:

Dacă includeți această declarație în partea de interfață a unei unități, cerc.dll este încărcat o dată la începerea programului. Pe parcursul executării programului, funcția CircleArea este disponibilă tuturor unităților care folosesc unitatea unde se află declarația de mai sus.

Încărcare dinamică

Puteți accesa rutine într-o bibliotecă prin apeluri directe către API-urile Win32, inclusiv LoadLibrary, FreeLibrary, și GetProcAddress. Aceste funcții sunt declarate în Windows.pas.

Iată cum să apelați funcția CircleArea folosind încărcare dinamică:

Când importați folosind încărcare dinamică, DLL nu este încărcat până la apelul către LoadLibrary. Biblioteca este descărcată de apelul către FreeLibrary.

Odată cu încărcare statică, DLL este încărcat și secțiunile sale de inițializare se execută înainte de executarea secțiunilor de inițializare a aplicației apelante. Aceasta se inversează cu încărcare dinamică.

Ar trebui să utilizați statice sau dinamice?

Iată o privire simplă asupra avantajelor și dezavantajelor atât încărcării DLL statice, cât și dinamice:

Încărcare statică

Pro:

  • Mai ușor pentru un dezvoltator începător; nu există apeluri API „urâte”.
  • DLL-urile sunt încărcate o singură dată la începerea programului.

Contra: