Soția programatorului a fost întrebată:
- Cum a avut grijă de tine?
Soția, după o meditație de un moment:
- Calculatorul a arătat.
Aplicații pentru DLL-uri
Deci, de ce avem nevoie de DLL-uri și de unde sunt folosite? Vom enumera doar câteva dintre domeniile aplicației:
Biblioteci individuale Conține funcții suplimentare utile programatorilor. De exemplu, funcții pentru lucrul cu șiruri de caractere sau - biblioteci complexe pentru conversia imaginilor. Resurse de stocare În DLL puteți stoca nu numai programe și funcții, ci și diverse resurse - pictograme, imagini, șir de șir, meniuri etc. Biblioteci de suport Ca exemplu, există biblioteci de pachete cunoscute precum: DirectX, ICQAPI (API pentru ICQ), OpenGL etc. De exemplu, într-un DLL, puteți stoca ferestre de programe (formulare) și așa mai departe. Plugin-uri (plug-in-uri) Aici este locul real pentru gândurile programatorului! Pluginurile sunt adăugiri la programul care extind capabilitățile acestuia. De exemplu, în acest articol, vom examina teoria creării unui plug-in pentru propriul program. O resursă partajată DLL (Dynamic Link Library) poate fi utilizată simultan prin mai multe programe sau procese (așa-numita resursă partajată partajată)
O scurtă descriere a funcțiilor și tehnicilor de lucru cu DLL-uri
Deci, care sunt trucurile și funcțiile pe care trebuie să le utilizați pentru a lucra cu DLL-ul? Să analizăm două metode de import de funcții din bibliotecă:
1 fel. Bind DLL la program.
Aceasta este metoda cea mai simplă și cea mai simplă pentru utilizarea funcțiilor importate dintr-un DLL. Cu toate acestea (și ar trebui să fiți atenți la acest lucru), această metodă are un dezavantaj semnificativ - dacă biblioteca utilizată de program nu este găsită, programul pur și simplu nu va porni, emite o eroare și raportează că resursa DLL nu a fost găsită. O căutare bibliotecă va fi efectuată: în directorul curent, în directorul programului, în WINDOWS \ SYSTEM, etc. Deci, pentru început - forma generală a acestei tehnici:
Nume de Funcție (sau Nume de Procedură) numele funcției (sau procedurii) care va fi utilizată în programul dvs.; Par1, Par2. numele parametrilor de funcție sau de procedură; Par1Type, Par2Type. tipuri de parametri sau proceduri funcționale (de exemplu, Integer); ReturnType tipul returului (numai pentru funcție); direcția stdcall, care trebuie să se potrivească exact cu cea utilizată în DLL în sine; directiva externă "DLLNAME.DLL" indicând numele DLL-ului extern din care va fi importată această funcție sau procedură (în acest caz DLLNAME.DLL); nume "FunctionName" ("ProcedureName") directivă care specifică numele exact al funcției în DLL în sine. Aceasta este o directivă opțională care vă permite să utilizați o funcție în program care are un alt nume decât cel adevărat (pe care îl are în bibliotecă); indicele FunctionIndex (ProcedureIndex) directivă indicând numărul de ordine al unei funcții sau proceduri din DLL. Aceasta este, de asemenea, o directivă facultativă.
2 fel. Încărcarea dinamică a unui DLL
Aceasta este o metodă mult mai complicată, dar și mai elegantă. El nu are dezavantajul primei metode. Singurul lucru care este neplăcut este cantitatea de cod necesară pentru implementarea acestei tehnici, iar dificultatea este că funcția importată din DLL este disponibilă numai atunci când acest DLL este încărcat și este în memorie. Puteți vedea un exemplu de mai jos, dar pentru moment - o scurtă descriere a funcțiilor WinAPI utilizate de această metodă:
LoadLibrary (LibFileName: PChar) încarcă librăria specificată LibFileName în memorie. La terminarea cu succes, funcția returnează mânerul (THandle) al DLL-ului în memorie. GetProcAddress (Modul: THandle; ProcName: PChar) citește adresa funcției bibliotecii expirate. La terminarea cu succes, funcția returnează mânerul (TFarProc) al funcției în DLL-ul încărcat. FreeLibrary (LibModule: THandle) invalidează LibModule și eliberează memoria asociată cu aceasta. Trebuie menționat faptul că după ce ați apelat la această procedură, funcțiile acestei biblioteci nu mai sunt disponibile.
Practică și exemple
Ei bine, acum este timpul să dați câteva exemple de utilizare a metodelor și tehnicilor de mai sus:
Exemplu 1. Bind DLL la program