Létrehozása és használata dinamikus csatolású könyvtárak (DLL)
Létrehozása és használata DLL
(Microsoft Visual C ++)
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 ++.
Létrehozása DLL
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 <<"\n\nThis function was called from "
<
A (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 "
<
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 a Windows \ System könyvtárba.
Az eredmények DLLRUN01.EXE
Ezt a funkciót hívták a C: \ DLLTEST \ DLLRUN01.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9
Ezt a funkciót hívták a C: \ DLLTEST \ DLLRUN01.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!" <
return;
>
GetModuleFileName ((HMODULE) hLib, (LPTSTR) mod, MAXMODULE);
cout <<"Library loaded: " <
LetterList = (cfunc) GetProcAddress ((HMODULE) hLib, "LetterList");
if ((NumberList == NULL) || (LetterList == NULL))
cout <<"Unable to load function(s)." <
return;
>
NumberList ();
LetterList ();
FreeLibrary ((HMODULE) hLib);
getch ();
>
Az eredmények DLLRUN02.EXE
Könyvtár betölteni: C: \ DLLTEST \ DLLTEST.DLL
Ezt a funkciót hívták a C: \ DLLTEST \ DLLRUN02.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9
Ezt a funkciót hívták a C: \ DLLTEST \ DLLRUN02.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
következtetés
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.