Създаване и използване на DLL (Microsoft Visual C)

Създаване и използване на DLL
(Microsoft Visual C ++)

Създаване на DLL е много по-лесно, отколкото си мислите. DLL е много полезно, ако сте програмиране за Windows. Тези библиотеки обикновено се съхранява често използвани съчетания. Тази статия описва как да се създаде прост DLL и показва как да се обадя на функциите, които се съдържат в него. Примерите са проектирани да използват Microsoft Visual C ++ 6.0, но е лесно да ги прехвърля на диалект на C ++.







Създаване на DLL

Нищо особено тук. Както обикновено, просто напишете функция като редовната програма. Ако използвате 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 <<"\n\nThis function was called from "
< < Cout <<"NumberList(): ";
за (INT I = 0; и<10; i++)
Cout <>
Cout <>

ученик "C" __declspec (dllexport) нищожен LetterList ()
GetModuleFileName (NULL, (LPTSTR) модул, MAXMODULE);
Cout <<"\n\nThis function was called from "
< < Cout <<"LetterList(): ";
за (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, трябва само едно копие от него, лъже, например, в директорията на Windows \ System.

Резултатите от DLLRUN01.EXE

Тази функция се нарича от C: \ DLLTEST \ DLLRUN01.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9

Тази функция се нарича от C: \ DLLTEST \ DLLRUN01.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!" < getch ();
се върне;
>

GetModuleFileName ((HMODULE) hLib, (LPTSTR) мод, MAXMODULE);
Cout <<"Library loaded: " < NumberList = (cfunc) GetProcAddress ((HMODULE) hLib "NumberList");
LetterList = (cfunc) GetProcAddress ((HMODULE) hLib "LetterList");
ако ((NumberList == NULL) || (LetterList == NULL))
Cout <<"Unable to load function(s)." < FreeLibrary ((HMODULE) hLib);
се върне;
>
NumberList ();
LetterList ();
FreeLibrary ((HMODULE) hLib);
getch ();
>

Резултатите от DLLRUN02.EXE

Библиотека зареден: C: \ DLLTEST \ DLLTEST.DLL

Тази функция се нарича от C: \ DLLTEST \ DLLRUN02.EXE
NumberList (): 0 1 2 3 4 5 6 7 8 9

Тази функция се нарича от C: \ DLLTEST \ DLLRUN02.EXE
LetterList (): а б в г д е ж з и й к л м н о п р С Т У Ф Х Ц Ш Щ

заключение

Разбира се, тези малки примери са далеч от програмни задачи на реалните, но те са достатъчно, за да разберат основните принципи на създаването и използването на DLL. Моля, ако откриете грешки или неточности. Изтегляне на изходния код, използван в този член, може да бъде тук.