Crearea și utilizarea DLL în delphi (dll obligatoriu la program, încărcare dinamică)

Biblioteca DLL vă permite să combinați codul reutilizabil într-o singură entitate. Funcțiile din DLL-biblioteci pot fi conectate dinamic la run-time, spre deosebire de funcțiile din pachetele Delphi, legate static la etapa de compilare a aplicației.







Pentru a crea o bibliotecă DLL, trebuie să executați comanda de meniu Fișier | Nou | Altele și să selectați elementul Expert DLL din pagina Nouă a dialogului Element nou.

Expertul DLL va crea automat un șablon gol pentru DLL. Spre deosebire de modul obișnuit care începe cu unitatea de cuvinte cheie, modulul bibliotecă DLL începe cu biblioteca de cuvinte cheie. Secțiunea utilizări a unei biblioteci DLL necesită conectarea a numai două pachete: SysUtils și Classes.

Crearea unei funcții DLL constă în mai mulți pași:

1. Mai întâi, în secțiunea de implementare a modulului, introduceți semnătura funcției și programați codul executat de funcție.

2. În continuare, în semnarea funcției este necesar să se determine modul în care va avea loc apelul parametrilor.

3. În concluzie, funcția care trebuie utilizată nu numai în cadrul modulului, ci și apelată din alte aplicații ar trebui declarată exportată în secțiunea exporturi.

Funcțiile din biblioteca DLL pot fi numite atât din aplicațiile dezvoltate în Delphi, cât și din aplicații scrise în alte limbi de programare, cum ar fi C ++.

Metoda de trecere a parametrilor este indicată printr-un punct și virgulă după descrierea funcției. De exemplu:

Funcția F1 (X, Y, Z: Real): Real; stdcall;

Diferitele moduri de trecere a parametrilor determină ordinea trecerii parametrilor (de la stânga la dreapta sau de la dreapta la stânga) și indică, de asemenea, cine va elibera memoria stivei (procedura apelată sau apelată). Când utilizați bibliotecile DLL ca componente solicitate din aplicații în alte limbi de programare, trebuie să utilizați modificatorul corespunzător al apelului. Pentru aplicațiile C ++, se folosește modificatorul de apel stdcall.

Pentru ca funcția descrisă în biblioteca DLL să fie apelată dintr-o altă aplicație, această funcție ar trebui exportată. O listă a tuturor funcțiilor exportate este specificată în secțiunea exporturi, separată printr-o virgulă

și se termină cu un punct și virgulă. Functiile de export pot fi efectuate in trei moduri:

• cu numele funcției utilizat în biblioteca DLL;

• cu numele funcției specificate ca denumire a exportului;

• prin funcția atribuită indexului.

Pentru a atribui o funcție unui index, trebuie să o specificați în secțiunea exporturi după numele funcției cu cuvântul cheie index.

Pentru ca funcția exportată să fie apelată de o altă denumire decât cea utilizată în DLL, în secțiunea exporturi după numele funcției, trebuie să specificați cuvântul cheie și numele noului export pentru această funcție.

Biblioteca DLL nu este un modul executabil. Pentru a obține codul său, este suficient să compilați proiectul.

Funcția F1 (X, Y: Integer): Integer; stdcall;

Conectarea statică a bibliotecii DLL

Biblioteca DLL poate fi conectată fie static, fie dinamic. Când conectați o bibliotecă DLL, aceasta este încărcată în memoria aplicației.







Cu o conexiune statică, DLL-ul este încărcat o dată când începe aplicația. Pe parcursul executării aplicației, numele funcției importate din biblioteca DLL care a fost conectată static indică aceeași funcție (punctul de intrare în DLL) din același DLL. Toate funcțiile din DLL care vor fi utilizate inițial în aplicație trebuie să fie declarate externe. În acest caz, trebuie să specificați, dacă este necesar, un modificator de apel. Dacă funcția este apelată de un index, atunci ar trebui să fie specificată cu numele utilizat în aplicație și indicele funcției din biblioteca DLL.

Ferestre, Mesaje, SysUtils, Variante, Clase, Grafica,

Controale, Formulare, Dialoguri, StdCtrls;

Editare: TEdit; [Câmp pentru introducerea primei valori>

Edit2: TEdit; (Câmpul pentru introducerea celei de-a doua valori>

Edit3: TEdit; (Câmp pentru afișarea rezultatului

execuție de funcții din biblioteca DLL>

Buttonl: TButton;

Button2: TButton; [Funcția utilizată de index este numită>

procedura ButtonlClickfSender: TObject);

procedura Button2Click (expeditor: TObject);

procedura TForml.Button2Click (expeditor: TObject);

Dynamic bibliotecă DLL conexiune

Spre deosebire de conexiunea statică a bibliotecii DLL care este executată atunci când aplicația este descărcată, conexiunea dinamică a bibliotecii DLL poate fi efectuată în orice moment al executării programului. După ce apelați funcția din biblioteca DLL, o puteți dezactiva. Dacă utilizați mai mult de un DLL în același timp, aceasta vă oferă o economie tangibilă de memorie. Pentru a conecta dinamic biblioteca DLL, sunt utilizate funcțiile Windows API. Windows API este un set de funcții standard utilizate pentru implementarea interacțiunii cu sistemul de operare.

Când apelați o funcție dintr-o bibliotecă DLL conectată dinamic, în loc să definiți numele funcției ca extern în cazul legării statice, trebuie să definiți un tip nou corespunzător tipului de funcție care trebuie apelat și să creați o variabilă de acest tip.

Pentru a executa un apel de la un DLL legat dinamic, urmați acești pași:

1. Creați un tip nou. corespunzătoare tipului funcției numite (numele tipului nou poate fi introdus după tipul secțiunii).

TMyFl = funcție (i, j: Integer): Integer; stdcall;

2. În secțiunea interfață var a modulului, creați o variabilă a tipului de funcție creat. De exemplu: MyFl. TMyFl;

3. Înainte de a încărca DLL-ul, declarați o variabilă de tip Integer, care va conține descriptorul bibliotecii care va fi atașată.

4. Apelați metoda LoadLibrary care conectează biblioteca DLL. De exemplu; h: = LoadLibrary ("Projectl.dll");

5. Verificați dacă conexiunea la bibliotecă are succes. Dacă numele bibliotecii DLL este incorect sau biblioteca nu este găsită, funcția LoadLibrary returnează 0.

8. În acest moment, puteți efectua un apel de la o bibliotecă DLL conectată dinamic.

9. Pentru a elibera și apoi a descărca DLL-ul, apelați metoda FreeLibrary, care dezactivează DLL-ul.

Ferestre, Mesaje, SysUtils, Variante, Clase, Grafica,

Controale, Formulare, Dialoguri, StdCtrls;

Utilizați biblioteca DLL pentru a apela dialogurile modale generale.

Rezultatul executării procedurii din biblioteca DLL poate fi afișarea unui dialog modal. Pentru a face acest lucru, creați obiectul de formă în metoda exportată, afișați-l ca dialog modal, apoi ștergeți obiectul de formă. În forma însăși, trebuie să luați în considerare apelarea metodei Close pentru a închide dialogul.

Pentru a crea un formular, utilizați metoda de creare, care trimite un indicator la formularul părinte - forma aplicației de apel - ca parametru. Acest parametru este trecut la funcția DLL numită.

Următoarea este o bibliotecă DLL exemplu care conține funcția utilizată pentru afișarea formei modale și returnează valoarea introdusă în ea.

Unitl_DLL în 'Unitl_DLL.pas';

procedura MyModalForm (var Z: intreg; F: TForm1); stdcall;

(Parametrul F este transmis când procedura este apelată și conține un indicator

pe formularul părinte - forma aplicației de apel>

(Primul parametru este utilizat pentru valoarea returnată>

Pentru a utiliza această bibliotecă DLL pentru a apela dialogul modal creat, puteți aplica atât legare dinamică cât și statică. Următorul exemplu ilustrează apelul unei funcții de la

DLL-bibliotecă, care afișează un dialog modal.

Ferestre, Mesaje, SysUtils, Variante, Clase, Grafica,







Articole similare

Trimiteți-le prietenilor: