Crearea și utilizarea unui DLL
(Microsoft Visual C ++)
Crearea unui DLL este mult mai ușor decât crezi. DLL-urile sunt foarte utile dacă programați în Windows. Aceste biblioteci stochează de obicei rutine utilizate frecvent. Articolul descrie cum se creează un DLL simplu și arată modul de a apela funcțiile conținute în el. Exemplele sunt concepute pentru a utiliza Microsoft Visual C ++ 6.0, dar este ușor să le traducem în orice dialect C ++.
Crearea unui DLL
Nimic special aici. Ca de obicei, scrieți doar funcții, ca într-un program obișnuit. Dacă utilizați MSVC, creați un nou proiect și specificați că creați Win32 Dynamic-Link Library. După compilare, veți obține un DLL, o bibliotecă de import (.lib) și o bibliotecă de export (.exp). Următoarele reprezintă un exemplu de cod DLL:
Fișierul de antet (DLLTEST.H)
#ifndef _DLLTEST_H_
#define _DLLTEST_H_
#include
#include
#include
extern "C" __declspec (dllexport) void NumberList ();
extern "C" __declspec (dllexport) void LetterList ();
Codul bibliotecii (DLLTEST.CPP)
#define MAXMODULE 50
extern "C" __declspec (dllexport) void NumberList ()
GetModuleFileName (modul NULL, (LPTSTR), MAXMODULE);
cout <<"\n\nThis function was called from "
<
pentru (int i = 0; i<10; i++)
cout <>
cout <
extern "C" __declspec (dllexport) void LetterList ()
GetModuleFileName (modul NULL, (LPTSTR), MAXMODULE);
cout <<"\n\nThis function was called from "
<
pentru (int i = 0; i<26; i++)
cout <
cout <
După cum puteți vedea, nu există nimic special în legătură cu codul. Aplicația folosită pentru exemplu este consola, deci aici două funcții pe care textul de ieșire este pur și simplu programat. rând
extern "C" __declspec (dllexport)
înseamnă că funcția va fi vizibilă în afara DLL (adică poate fi apelată din programul nostru).
După compilare vom primi biblioteca. Acum, să vedem cum poate fi folosit.
Utilizarea DLL (cu bibliotecă de import)
Mai întâi, să vedem cum să folosim DLL-ul împreună cu biblioteca de import (dlltest.lib), obținută prin compilarea exemplului anterior. Această metodă este foarte simplă, deoarece în acest caz trebuie doar să includeți fișierul antetului bibliotecii și biblioteca însăși în proiect. exemplu:
Fișierul sursă pentru aplicația care utilizează DLL (DLLRUN01.EXE)
#include
#include
void main ()
NumărList ();
LetterList ();
Acest lucru va funcționa bine dacă aveți un fișier antet și biblioteca de import (dlltest.lib) este situat în directorul indicat de căile de bibliotecă. Înainte de a rula aplicația, asigurați-vă că DLL este într-un director de referință de variabila de mediu PATH sau în același director ca și fișierul executabil, sau primiți un mesaj de eroare. Cu toate acestea, în cazul în care 10 programe folosesc acest DLL, aveți nevoie doar de o copie a acestuia, situată, de exemplu, în directorul Windows \ System.
Rezultatele DLLRUN01.EXE
Această funcție a fost apelată din C: \ DLLTEST \ DLLRUN01.EXE
Număr de numere (): 0 1 2 3 4 5 6 7 8 9
Această funcție a fost apelată din C: \ DLLTEST \ DLLRUN01.EXE
LetterList (): a b c d e f g h i j k l m n o p q r s t u v w x y z
Utilizarea DLL fără bibliotecă de import
Acum, să vedem cum să încărcați DLL-ul "în zbor". Acest lucru este necesar în cazul în care nu ați dezvoltat acest DLL și nu aveți un fișier antet și o bibliotecă de import.
Fișierul sursă pentru aplicația care utilizează biblioteca DLL este aplicația consolei Win32 (DLLRUN01.EXE)
#include
#include
#include
#include
#define MAXMODULE 50
typedef void (WINAPI * cfunc) ();
cfunc NumberList;
cfunc LetterList;
void main ()
HINSTANCE hLib = LoadLibrary ("DLLTEST.DLL");
dacă (hLib == NULL)
cout <<"Unable to load library!" <
return;
>
GetModuleFileName ((HMODULE) Hlib, (LPTSTR) mod, MAXMODULE);
cout <<"Library loaded: " <
LetterList = (cfunc) GetProcAddress ((HMODULE) hLib, "LetterList");
dacă ((NumberList == NULL) || (LetterList == NULL))
cout <<"Unable to load function(s)." <
return;
>
NumărList ();
LetterList ();
FreeLibrary ((HMODULE) hLib);
getch ();
>
Rezultatele DLLRUN02.EXE
Biblioteca încărcată: C: \ DLLTEST \ DLLTEST.DLL
Această funcție a fost apelată din C: \ DLLTEST \ DLLRUN02.EXE
Număr de numere (): 0 1 2 3 4 5 6 7 8 9
Această funcție a fost apelată din C: \ DLLTEST \ DLLRUN02.EXE
LetterList (): a b c d e f g h i j k l m n o p q r s t u v w x y z
concluzie
Desigur, aceste mici exemple sunt departe de sarcinile reale ale programatorului, însă sunt destul de suficiente pentru a înțelege principiile de bază ale creării și utilizării DLL-urilor. Scrieți dacă găsiți erori sau inexactități. Descărcați codul sursă al programelor utilizate în articol, puteți de aici.