Utilizarea și crearea în dll Delfi - surse delphi întrebări frecvente

Soția a întrebat programator:
- Și a îngrijit tine?
Soția, după un moment de gândire:
- Intră, computerul a arătat.

Aplicații DLL

Deci, de ce avem nevoie de un DLL, și în cazul în care acestea sunt utilizate. Aici sunt doar câteva dintre domeniile de aplicare a acestora:

Bibliotecile individuale conțin funcții suplimentare utile pentru programatori. De exemplu, funcțiile pentru siruri de caractere, sau - biblioteci complexe de conversie a imaginii. resursele de stocare într-un DLL, puteți stoca nu numai programele și funcțiile, dar, de asemenea, toate tipurile de resurse - icoane, pictura, tablouri de coarde, meniuri, etc. Suport Library Ca un exemplu, o bibliotecă de pachete cunoscute ca: DirectX, ICQAPI (API pentru ICQ), OpenGL, etc. Anumite părți ale programului, de exemplu, un DLL pot fi stocate fereastra (formă), etc. Plugin-uri (plugin-uri) Aceasta este în cazul în care domeniul de aplicare reală pentru gândurile programator! Plug-in-uri - plug-in-uri care se extind capacitățile sale. De exemplu, în acest articol vom discuta despre teoria creării de plug-in pentru propriul program. Partajat DLL resursă (Dynamic Link Library) poate fi utilizat de mai multe aplicații sau procese (de exemplu, partajarea - în comun a resurselor)

O scurtă descriere a funcțiilor și a tehnicilor de lucru cu DLL

Deci, ce sunt tehnicile și funcțiile trebuie să fie utilizate pentru a lucra cu DLL? Să luăm două metode de importul funcțiilor din bibliotecă:

1 mod. DLL legare la program.

Aceasta este metoda cea mai simplă și funcții ușor de utilizat, importate din DLL. Cu toate acestea (și acest lucru ar trebui remarcat), această metodă are un dezavantaj foarte important - în cazul în care biblioteca, care este utilizat de program nu este găsit, atunci programul pur și simplu nu va începe, da eroare și a raportat 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. Ei bine, pentru început - forma generală a recepției:

FunctionName (sau ProcedureName), numele funcției (sau procedura), care vor fi utilizate în programul; PAR1, PAR2. numele parametrilor de funcție sau procedură; Par1Type, Par2Type. funcție tipuri de parametri sau procedură (de exemplu, Integer); Tip retur returnType (pentru funcția numai); Directiva stdcall, care trebuie să coincidă exact cu cele mai utilizate în DLL; Directiva externă „DLLNAME.DLL“ specifică numele unui DLL extern, care vor fi importate din funcția sau procedura (în acest caz - DLLNAME.DLL); denumirea „functionName“ ( „ProcedureName“) directivă, indicând numele exact al funcției în cele mai DLL. Aceasta este o directivă opțională care vă permite să utilizați funcția de program care are un alt nume decât cel adevărat (care este în bibliotecă); indicele FunctionIndex (ProcedureIndex) Directiva, care indică funcția numărul sau DLL procedura de serie. Acesta este, de asemenea, o directivă opțională.

2 metodă. DLL încărcare dinamică

Este mult mai complicat, dar, de asemenea, metoda mai elegant. El este lipsit de lipsa primei metode. Singurul lucru care este neplăcut - cantitatea de cod necesare pentru punerea în aplicare a acestei metode, dificultatea este că funcția de DLL viewable.END_BOLD importate numai atunci când acest DLL este încărcat și stocat în memorie. Cu exemplul de mai jos poate fi găsit, și totuși - o scurtă descriere a acestei metode utilizate funcții WinAPI:

LoadLibrary (LibFileName: PChar) LibFileName încărcare a bibliotecilor în memorie. După finalizarea cu succes, funcția returnează un mâner (THandle) DLL în memorie. GetProcAddress (Modulul: THandle; ProcName: PChar) citește adresa funcției de a exporta biblioteca. După finalizarea cu succes, funcția returnează un mâner (TFarProc) funcții în DLL încărcate. FreeLibrary (LibModule: THandle) invalidează LibModule și eliberează memoria asociată. Trebuie remarcat faptul că, după apelarea la această procedură, funcțiile bibliotecii nu mai sunt disponibile.

Practică și exemple

Ei bine, acum e timpul să vă dau câteva exemple de utilizare a metodelor și tehnicilor de mai sus:

Exemplul 1. Legarea la un program de DLL