Създаване и използване на DLL (Microsoft Visual C)
Създаване и използване на динамични библиотеки връзка (DLL) div.main
Създаване и използване на DLL
(Microsoft Visual C ++) Въведение
Създаване на DLL е много по-лесно, отколкото си мислите. DLL е много полезно, ако сте програмиране за Windows. Тези библиотеки обикновено се съхранява често използвани съчетания. Тази статия описва как да се създаде прост DLL и показва как да се обадя на функциите, които се съдържат в него. Примерите са проектирани да използват Microsoft Visual C ++ 6.0, но е лесно да ги прехвърля на диалект на C ++.
Нищо особено тук. Както обикновено, просто напишете функция като редовната програма. Ако използвате MSVC, да създадете нов проект и уточни, че създавате Win32 Dynamic-Link Library. След компилация, можете да получите DLL, библиотека за внос (.lib) и износ библиотека (.exp). По-долу е примерен код за вашия DLL:
Файлът с глава (DLLTEST.H)
#ifndef _DLLTEST_H_
#define _DLLTEST_H_
#include
#include
#include
екстернант "С" __declspec (dllexport) невалидни NumberList ();
екстернант "С" __declspec (dllexport) невалидни LetterList ();
Кодът на библиотеката (DLLTEST.CPP)
# определят MAXMODULE 50
ученик "C" __declspec (dllexport) нищожен NumberList ()
GetModuleFileName (NULL, (LPTSTR) модул, MAXMODULE);
Cout <<"nnThis function was called from "
<
за (INT I = 0; и<10; i++)
Cout <>
Cout <
ученик "C" __declspec (dllexport) нищожен LetterList ()
GetModuleFileName (NULL, (LPTSTR) модул, MAXMODULE);
Cout <<"nnThis function was called from "
<
за (INT I = 0; и<26; i++)
Cout <
Cout <
Както можете да видите, нищо специално за кода там. Приложението използва за пример - конзола, така че просто се програмира две функции, че производството на текст. ред
екстернант "С" __declspec (dllexport)
Това означава, че функцията е видим извън DLL (т.е., той може да бъде извикан от нашата програма).
След компилация получаваме библиотеката. Сега posmmotrim как тя може да бъде използвана.
Използването на DLL (с внос библиотека)
Моля, вижте как да използвате DLL с внос библиотека (dlltest.lib), който се получава при компилация от предишния пример. Този метод е много проста, тъй като в този случай просто трябва да се включи заглавния файл на библиотеката и самата библиотека към проекта. например:
Заявление източник файл, който използва DLL (DLLRUN01.EXE)
#include
#include
невалидни основни ()
NumberList ();
LetterList ();
Това ще работи добре, ако имате файл заглавието и внос библиотека (dlltest.lib) се намира в директорията, посочен от пътеките на библиотеката. Преди да стартирате приложението, се уверете, че DLL е в директория посочен от променливата от обкръжението или в същата директория като изпълним файл, или да получите съобщение за грешка. Въпреки това, ако програмите 10 използват този DLL, трябва само едно копие от него, лъже, например, в директорията WindowsSystem.
Резултатите от DLLRUN01.EXE
Тази функция се нарича от C: DLLTESTDLLRUN01.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9
Тази функция се нарича от C: DLLTESTDLLRUN01.EXE
LetterList (): а б в г д е ж з и й к л м н о п р С Т У Ф Х Ц Ш Щ
Използването на DLL библиотека внос, без да
Сега нека видим как да се зареди DLL "в движение". Необходимо е и да не се развие този DLL и нямат заглавния файл и внос библиотеката.
Заявление източник файл, който използва DLL - конзола заявление Win32 (DLLRUN01.EXE)
#include
#include
#include
#include
# определят MAXMODULE 50
typedef нищожен (WinAPI * cfunc) ();
cfunc NumberList;
cfunc LetterList;
невалидни основни ()
HINSTANCE hLib = LoadLibrary ( "DLLTEST.DLL");
ако (hLib == NULL)
Cout <<"Unable to load library!" <
се върне;
>
GetModuleFileName ((HMODULE) hLib, (LPTSTR) мод, MAXMODULE);
Cout <<"Library loaded: " <
LetterList = (cfunc) GetProcAddress ((HMODULE) hLib "LetterList");
ако ((NumberList == NULL) || (LetterList == NULL))
Cout <<"Unable to load function(s)." <
се върне;
>
NumberList ();
LetterList ();
FreeLibrary ((HMODULE) hLib);
getch ();
>
Резултатите от DLLRUN02.EXE
Библиотека зареден: C: DLLTESTDLLTEST.DLL
Тази функция се нарича от C: DLLTESTDLLRUN02.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9
Тази функция се нарича от C: DLLTESTDLLRUN02.EXE
LetterList (): а б в г д е ж з и й к л м н о п р С Т У Ф Х Ц Ш Щ
Разбира се, тези малки примери са далеч от програмни задачи на реалните, но те са достатъчно, за да разберат основните принципи на създаването и използването на DLL. Моля, ако откриете грешки или неточности. Изтегляне на изходния код, използван в този член, може да бъде тук.