|
Лабораторная работа №5
Создание модуля DLL.
Задание: Создать и использовать динамически загружаемую библиотеку (DLL). Для проверки созданного DLL - модуля создать тестовое приложение.
Техническое задание: Создать DLL модуль позволяющий находить среднее 4 чисел. Создать простое тестовое для DLL модуля, приложение используя диалоговое окно.
Краткие теоретические сведения:
Мастер MFC AppWizard (DLL) – собирает множество функций в DLL-модуль, чтобы все они использовали классы из MFC. Если же функции не используют MFC лучше пользоваться вариантом Win32 Dinamic - Link Library (получаем пустой файл проекта).
Динамически связываемые библиотеки (DLL-модули) являются базовыми компонентами операционной системы Windows, где используются модули Kernel32.dll, User32. dll и Gdi32.dll для выполнения своих функций.
Если собрать несколько функций в один DLL-модуль, то данный модуль будет экспортировать эти функции для использования в других программах. И довольно часто одни DLL-модули для выполнения своей работы нуждаются в импорте функций из других DLL-модулей.
Определения экспортируемой функции:
__ declspec(dllexport) тип_Данных int идентификтор_Переменной;
//Для переменных.
__ declspec(dllexport) возвращаемый_Тип имя_Функции ([список_Аргументов]);
//Для функций.
Определения импортирования функции:
__ declspec(dllimport) тип_Данных int идентификатор_Переменной;
//Для переменных.
__declspec(dllimport) возвращаемый_Тип имя_Функции ([список_Аргументов]);
//Для функций.
Большинство DLL-модулей загружаются неявно, и их загрузкой и выгрузкой управляет Windows. Но в процессе разработки приложения в качестве временного хранилища для этой цели можно использовать папку выделяемых файлов проекта. Однако нужно следить за тем, чтобы в итоге в разных папках, включая папки Windows, Windows\System и папку проекта, не оказались разные версии одного и того же DLL-модуля.
При компиляции DLL-модуля транслятор VC++ создает файл с расширением *.LIB, который используется для разрешения адресов загрузки в DLL-модуле и содержит полное имя динамически подключаемой библиотеки, тогда как файл заголовка содержит его описание.
Для этого необходимо – подключить файл заголовка к исходному файлу, использующему функции из модуля DLL, и указать имя файла библиотеки (*.LIB) в поле Object/librarymodules на вкладке Link диалогового окна ProjectSettings.
рис 1 Добавление в установки проекта файла библиотеки (*.LIB)
Внешний вид тестового приложения.
Тестовое приложение для проверки DLL-модуля содержит лишь такой набор функций, которого достаточно, чтобы протестировать модуль.
На этом этапе проверяем только функциональные возможности модуля.
рис 2 Тестовое приложение.
Код DLL модуля представлен в приложении: Листинг 1.
Код для проверки DLL модуля представлен в приложении: Листинг 2.
Приложение
Листинг 1
extern "C"__declspec(dllexport) double MyFunction(double d,double c, double b, double a)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
double sumsr;
sumsr=(d+c+b+a)/4.;
return sumsr;
}
Листинг 2
Использование функции из DLL при нажатии на кнопку “Вычислить среднее”
void CTestDlg::OnButton1()
{
UpdateData(TRUE);
m_Aver=MyFunction(m_D,m_C,m_B, m_A);
UpdateData(FALSE);
}
Инициализация функции - MyFunction в заголовочном файле тестового приложения.
extern "C"__declspec(dllimport) double MyFunction(double d,double c, double b, double a);
Литература
1. Дэвис Чепмен “Освой самостоятельно. Visual C++.NET за 21 день”. Издательский дом «Вильямс» Москва * Санкт-Петербург * Киев. 2002г.
2. Кэйт Грегори “Использование Visual C++ 6.0” Издательский дом «Вильямс» Москва * Санкт-Петербург * Киев. 2002г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.