Crearea și folosirea dll (c vizual Microsoft)

Crearea și folosirea unui DLL
(Microsoft Visual C ++)

Creați un DLL este mult mai ușor decât crezi. DLL este foarte util dacă sunteți de programare pentru Windows. Aceste biblioteci stoca de obicei rutine utilizate frecvent. Acest articol descrie modul de a crea un DLL simplu și arată cum să apela funcțiile conținute în acesta. Exemplele sunt proiectate pentru a utiliza Microsoft Visual C ++ 6.0, dar este ușor de a le transfera la orice dialect al C ++.







Crearea unui DLL

Nimic special aici. Ca de obicei, ai scrie doar o funcție ca programul obișnuit. Dacă utilizați MSVC, creați un proiect nou și specificați că creați un Win32 Dynamic-Link Library. După compilare, veți obține un DLL, o bibliotecă de import (.lib) și o bibliotecă de export (.exp). Ceea ce urmează este un exemplu de cod pentru DLL-ul:

Fișierul 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 bibliotecă (DLLTEST.CPP)

#define MAXMODULE 50

extern "C" __declspec (dllexport) void NumberList ()
GetModuleFileName (NULL, (LPTSTR) modul, MAXMODULE);
cout <<"\n\nThis function was called from "
< < cout <<"NumberList(): ";
pentru (int i = 0; i<10; i++)
cout <>
cout <>

extern "C" __declspec (dllexport) void LetterList ()
GetModuleFileName (NULL, (LPTSTR) modul, MAXMODULE);
cout <<"\n\nThis function was called from "
< < cout <<"LetterList(): ";
pentru (int i = 0; i<26; i++)
cout <>
cout <>

După cum puteți vedea, nimic special despre codul acolo. Cererea utilizată, de exemplu, - o consolă, deci nu este doar programat două funcții acel text de ieșire. rând

extern "C" __declspec (dllexport)

Aceasta înseamnă că funcția este vizibilă în afara DLL (de exemplu, acesta poate fi apelat din programul nostru).
După compilare vom obține biblioteca. Acum posmmotrim cum poate fi folosit.







Utilizarea DLL (cu biblioteca de import)

Vă rugăm să consultați modul de utilizare a DLL cu biblioteca de import (dlltest.lib), care se obține la compilare din exemplul anterior. Această metodă este foarte simplu, pentru că în acest caz, trebuie doar să includă fișierul antet al bibliotecii și biblioteca în sine la proiect. exemplu:

fișier sursă aplicație care utilizează un DLL (DLLRUN01.EXE)

#include
#include

void main ()
NumberList ();
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 numit de la C: \ DLLTEST \ DLLRUN01.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9

Această funcție a fost numit de la 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 bibliotecii DLL de import fără

Acum, să vedem cum să se încarce DLL „on the fly“. Este necesar, dacă nu dezvolta acest DLL și nu au fișierul antet și biblioteca de import.

Aplicație fișier sursă care utilizează un DLL - aplicație consolă 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");
if (Hlib == NULL)
cout <<"Unable to load library!" < getch ();
return;
>

GetModuleFileName ((HMODULE) Hlib, (LPTSTR) mod, MAXMODULE);
cout <<"Library loaded: " < NumberList = (cfunc) GetProcAddress ((HMODULE) Hlib, "NumberList");
LetterList = (cfunc) GetProcAddress ((HMODULE) Hlib, "LetterList");
if ((NumberList == NULL) || (LetterList == NULL))
cout <<"Unable to load function(s)." < FreeLibrary ((HMODULE) Hlib);
return;
>
NumberList ();
LetterList ();
FreeLibrary ((HMODULE) Hlib);
getch ();
>

Rezultatele DLLRUN02.EXE

Biblioteca încărcat: C: \ DLLTEST \ DLLTEST.DLL

Această funcție a fost numit de la C: \ DLLTEST \ DLLRUN02.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9

Această funcție a fost numit de la 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 exemple mici sunt departe de sarcinile de programare reale, dar ele sunt suficiente pentru a înțelege principiile de bază ale crearea și utilizarea DLL. Te rog, dacă găsiți orice erori sau inexactități. Descărcați codul sursă utilizat în acest articol poate fi aici.