Létrehozása és használata dll (Microsoft Visual C)

Létrehozása és használata dinamikus kapcsolat könyvtárak (DLL) div.main

Létrehozása és használata DLL
(Microsoft Visual C ++) Bevezetés

Hozzon létre egy DLL sokkal könnyebb, mint gondolnánk. DLL nagyon hasznos, ha a programozás Windows. Ezek a könyvtárak általában gyakran használt rutinok. Ez a cikk leírja, hogyan lehet létrehozni egy egyszerű DLL és megmutatja, hogyan kell hívni a funkciók bennük. Példák vannak kialakítva, hogy a Microsoft Visual C ++ 6.0, de ez könnyen átadják bármely nyelvjárás C ++.







Semmi különös itt. Mint rendesen, akkor csak írj egy függvény, mint a rendszeres program. Ha a MSVC, hozzon létre egy új projektet, és adja meg, hogy létrehoz egy Win32 DLL. Összeállításuk után, kapsz egy DLL, import könyvtár (.lib) és az export könyvtárat (.exp). A következő példa egy kódot a DLL:

A fejléc fájlt (DLLTEST.H)

#ifndef _DLLTEST_H_
#define _DLLTEST_H_

#include
#include
#include

extern "C" __declspec (dllexport) void NumberList ();
extern "C" __declspec (dllexport) void LetterList ();

A könyvtár kód (DLLTEST.CPP)

#define MAXMODULE 50

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

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

Mint látható, semmi különleges a kódot is. Az alkalmazás használható például - a konzol, így csak programozott két funkció kimeneti szövegben. sor

extern "C" __declspec (dllexport)

Ez azt jelenti, hogy a funkció kívül látható DLL (azaz lehet nevezni a programból).






Összeállításuk után megkapjuk a könyvtárban. Most posmmotrim hogyan lehet használni.

Használata DLL (könyvtári import)

Kérjük, tekintse meg, hogyan kell használni a DLL import könyvtár (dlltest.lib), amelyet úgy kapunk meg összeállítása az előző példában. Ez a módszer nagyon egyszerű, mert ebben az esetben csak meg kell, hogy tartalmazza a header fájlt a könyvtár és a könyvtár maga a projekt. például:

Alkalmazás forrás fájlt, amely egy DLL (DLLRUN01.EXE)

#include
#include

void main ()
NumberList ();
LetterList ();

Ez jól működik, ha van egy header file import könyvtár (dlltest.lib) található a könyvtárban által hivatkozott könyvtár utak. Mielőtt elindítja az alkalmazás, győződjön meg arról, hogy a DLL van által hivatkozott könyvtár PATH környezeti változó, vagy ugyanabban a könyvtárban, mint a futtatható fájlt, vagy kapsz egy hibaüzenetet. Azonban, ha a 10 program használja ezt a DLL, akkor csak egy példányt belőle, hazug, például WindowsSystem könyvtárban.

Az eredmények DLLRUN01.EXE

Ez a függvény hívták a C: DLLTESTDLLRUN01.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9

Ez a függvény hívták a C: DLLTESTDLLRUN01.EXE
LetterList (): a b c d e f g h i j k l m n o o q r s t u v w x y z

Használata DLL import könyvtár nélkül

Most lássuk, hogyan kell betölteni a DLL „on the fly”. Szükséges, ha nem alakul ki ez a DLL és nincs header fájlt és import könyvtár.

Alkalmazás forrás fájlt, amely egy DLL - Win32 konzol alkalmazás (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 ();
>

Az eredmények DLLRUN02.EXE

Könyvtár betöltött: C: DLLTESTDLLTEST.DLL

Ez a függvény hívták a C: DLLTESTDLLRUN02.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9

Ez a függvény hívták a C: DLLTESTDLLRUN02.EXE
LetterList (): a b c d e f g h i j k l m n o o q r s t u v w x y z

Természetesen ezek a kis példák messze valós programozási feladatok, de ezek ahhoz, hogy megértsék az alapelveket létrehozását és használatát DLL. Kérjük, ha valamilyen hibát vagy pontatlanságot. Töltse le a forráskódot a cikkben használt itt lehet.