Лаб7_сис_отчет

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ, МОЛОДЁЖИ И СПОРТА УКРАИНЫ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ, МОЛОДЁЖИ И СПОРТА АР КРЫМ

РВУЗ «КРЫМСКИЙ ИНЖЕНЕРНО-ПЕДАГОГИЧЕСИЙ УНИВЕРСИТЕТ»

Факультет информатики

Кафедра информационно-компьютерных технологий

Отчет по лабораторной работе№7

Тема:« Разработка и использование DLL»

студента III курса группы И-1-10

направления подготовки

6.040302 – «Информатика»

Самсонова Е.С.

Цель работы:

Ознакомление с одним из наиболее важным структурным элементом Windows — библиотеками динамической компоновки (Dynamic Link Libraries, DLL), получение практических навыков по созданию динамических библиотек.

Ход Работы:

Создание DLL библиотеки

DLL (англ. Dynamic-link library — библотека динамической компоновки) — понятие операционных систем Microsoft Windows и IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями.

В меню Файл выбирали Проект….

В узле Visual C++ области Типы проектов выбирали Win32.

В области Шаблоны выбирали Консольное приложение Win32.

Имя проекта Lab7_dll

Для запуска мастера приложений Win32 нажмите кнопку ОК. На странице Общие сведения диалогового окна Мастер приложений Win32нажмите кнопку Далее.

На странице Параметры приложения диалогового окна Мастер приложений Win32, в поле Тип приложения, выбирали пункт DLL

#include

BOOL WINAPI DLLMain(HINSTANCE hdll, DWORD dwReason, LPCVOID lpReserved)

{

switch(dwReason)

{

case DLL_PROCESS_ATTACH://сообщение о загрузке DLL

break;

case DLL_THREAD_ATTACH://создан новый поток функция DLLMAin вызываетcя контесте этого потока

break;

case DLL_THREAD_DETACH://поток завершается

break;

case DLL_PROCESS_DETACH://DLL выгружается из адресного процесса

break;

}

return TRUE;

}

extern «C» __declspec (dllexport) int count =0;

extern «C» __declspec (dllexport) int Add(int n)

{

count +=n;

return count;

}

extern «C» __declspec (dllexport) int Sub(int n)

{

count -=n;

return count;

}

Загрузка DLL

Для загрузки был создан обычный консольный проект win32

int main()

{

HMODULE hdll;

int (*Add)(int);

int (*Sub)(int);

int *pCount;

hdll=LoadLibraryA(«Lab7_dll.dll»);//отображает заданный исполняемый модуль в адресное пространство вызывающего процесса

if(!hdll)//если не удалось загрузить вывод об ошибке

{

cout

return GetLastError();

}

pCount = (int *)GetProcAddress(hdll,»count»);//извлекает адрес экспортируемой переменной из подключаемой библиотеки Lab7_dll.dll

if(!pCount)

{

cout

return GetLastError();

}

cout

Add= (int (*)(int)) GetProcAddress(hdll,»Add» );//извлекает адрес экспортируемой функции из подключаемой библиотеки Lab7_dll.dll

Sub= (int (*)(int)) GetProcAddress(hdll,»Sub» );//извлекает адрес экспортируемой функции из подключаемой библиотеки Lab7_dll.dll

cout

cout

FreeLibrary(hdll);//отключение Lab7_dll.dll от процесса

cin.get();

}

В программе загружается DLL библиотека, из которой извлекаются функции Add и Sub, и переменная pCount. Add добавляет к переменной pCount, передаваемое ей значение. Sub отнимает от переменной pCount, передаваемое ей число.