Лабораторная работа №14
Тема: «Использование динамических библиотек для создания приложений»
Цель работы: приобрести практические навыки создания приложений с использованием динамических библиотек.
Краткие теоретические сведения:
Наиболее прямой путь создания программы - собрать исходный код всех функций, скомпилировать его и скомпоновать все в единый исполняемый образ. Эта монолитная модель с одним исполняемым образом проста, но обладает рядом недостатков.
Динамические библиотеки могут быть использованы для создания разделяемых библиотек. Одной динамической библиотекой пользуются несколько программ, а в память загружается только одна ее копия. Все программы отображают адресные пространства своих процессов в код библиотеки, при этом каждый поток будет иметь собственную копию неразделяемой памяти в стеке.
Неявное связывание
Неявное связывание, или связывание во время загрузки- более простой из двух способов. При использовании языка Microsoft Visual C++ для этого необходим ряд шагов:
1. Функции для новой библиотеки собираются и компонуются как библиотека DLL, а не как, например, консольное приложение.
2. В процессе компоновки создается библиотечный файл.LIB, который является суррогатомдля основного кода. Этот файл необходимо поместить в каталог вызывающей программы.
3. Процесс компоновки создает и файл.dll, содержащий исполняемый образ. Обычно этот файл помещается в тот же каталог, что и приложение, которое будет его использовать, а приложение загружает.DLL во время инициализации.
Экспорт и импорт функций
Наиболее существенное изменение, необходимое для переноса функции в динамическую библиотеку - это ее определение как экспортируемой. Это достигается путем использования модификатора для функции, помещаемой в динамическую библиотеку как показано ниже:
_declspec (dllexport)
DWORD MyFunction (...);
_declspec – модификатор функции,
MyFunction – функция, помещаемая в библиотеку.
В этом случае процесс компоновки создаст файл библиотеки.dll и файл.lib. Файл.lib - это суррогат библиотеки, который должен быть связан с вызывающей ее программой для разрешения внешних ссылок и создания действительных связей с файлом.dll во время загрузки и подключаемый на стадии компановки.
Вызывающая функцию программа должна определить импортируемую функцию путем использования модификатора _declspec (dllimport)
DWORD MyFunction (...);
При компоновке вызывающей библиотеку программы, т.е. перед созданием.exe файла, необходимо в меню Project -->Setting на вкладке Link в окне Project_Options набрать путь и имя файла библиотеки MyFunction.lib. После этого необходимо убедиться в том, что файл библиотеки.DLL доступен ей. Обычно это обеспечивается помещением файла.DLL в тот же каталог, в котором находится исполняемый файл.