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 creați și utilizați DLL-uri pentru a putea 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ții API specifice (DLL).
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 cercul.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 către sunați la 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 atât statice, cât și dinamice:
Încărcare statică
Pro:
- Mai ușor pentru un dezvoltator începător; nu „urât” Apeluri API.
- DLL-urile sunt încărcate o singură dată la începerea programului.
Contra:
- Aplicația nu va începe dacă lipsește DLL-urile sau nu poate fi găsită. Va apărea un mesaj de eroare ca acesta: "Această aplicație nu a reușit să pornească, deoarece 'missing.dll' nu a fost găsită. Reinstalarea aplicației poate rezolva această problemă ". Prin proiectare, ordinea de căutare DLL cu legătură statică include directorul din care aplicația încărcat, directorul de sistem, directorul Windows și directoarele enumerate în mediul PATH variabil. Rețineți, de asemenea, că comanda de căutare poate fi diferită pentru diverse versiuni Windows. Întotdeauna așteptați să aveți toate DLL-urile în directorul în care se află aplicația apelantă.
- Se folosește mai multă memorie din moment ce toate DLL-urile sunt încărcate chiar dacă nu veți folosi unele funcții
Încărcare dinamică
Pro:
- Puteți rula programul dvs. chiar și atunci când unele biblioteci pe care le folosește nu sunt prezente.
- Consumul de memorie mai mic, deoarece DLL-urile sunt utilizate numai la nevoie.
- Puteți specifica calea completă către DLL.
- Poate fi utilizat pentru aplicații modulare. Aplicația expune doar (încărcări) module (DLL) „aprobate” pentru utilizator.
- Posibilitatea de a încărca și descărca biblioteca în mod dinamic, este baza unui sistem de conectare care permite unui dezvoltator să adauge funcționalități suplimentare programelor.
- Compatibilitate cu versiuni mai vechi cu Windows, în care DLL-urile de sistem ar putea să nu suporte aceleași funcții sau să fie acceptate în același mod. Detectarea mai întâi a versiunii Windows, apoi conectarea dinamică în funcție de ce rulează aplicația dvs., vă permite să suportați mai multe versiuni de Windows și oferă soluții de rezolvare pentru sisteme de operare mai vechi (sau cel puțin, dezactivând cu grație funcțiile pe care nu le puteți a sustine.)
Contra:
- Necesită mai mult cod, ceea ce nu este întotdeauna ușor pentru un dezvoltator începător.