МИНИСТЕРСТВО ОБРАЗОВАНИЯ МОСКОВСКОЙ ОБЛАСТИ
ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ЛУХОВИЦКИЙ АВИАЦИОННЫЙ
ТЕХНИКУМ
Специальность 09.02.07 «Информационные системы и программирование»
ЛАБОРАТОРНОЕ ЗАНЯТИЕ № 7
по дисциплине «Технология разработки программного обеспечения»
Тема: Динамические библиотеки DLL
Выполнил: Студентка 3 курса группы ИС 3-5
Принял: Преподаватель дисциплины
«Технологии разработки
и защиты баз данных»
ЛУХОВИЦЫ, 2024 г.
Юрина А.А.
Филоненко И.Н.
Задача.
Дан массив целых чисел из элементовN.
C помощью подпрограмм dll-библиотеки найти:
б) среднее геометрическое элементов заданного
массива.
Рисунок 1. Графический интерфейс программы
Рисунок 2. Код библиотеки DLL
Рисунок 3.2 Код библиотеки DLL
Раздел exports делает процедуры и функции DLL внешне доступными, в
нём перечисляются имена подпрограмм и адреса их точек входа. В DLL может
быть несколько списков exports, но перечисляемые в них подпрограммы должны
быть описаны где-то выше по тексту библиотеки.
Способы подключения библиотек разделяют на статические и
динамические.
Статический способ подключения.
Рисунок 4. Код программы со статическим подключением
Статическая загрузка происходит во время компиляции программы и
использует привязку динамической библиотеки к программе, то есть ищет dll в
файловой системе. Существенный недостаток этого метода – dll может быть не
найден и программа просто не запустится. А поиск библиотеки будет вестись: в
текущем каталоге, в каталоге программы, в каталоге WINDOWS\SYSTEM, и т.д.
Вначале указываются имена подпрограмм, их параметры, тип для
возвращаемого значения функции, директива external ‘Extremum.dll’ указывает
имя подключаемой dll.
Динамический способ подключения.
Динамическая загрузка происходит во время выполнения программы и
поэтому позволяет изменять библиотеку без перекомпиляции основной
программы. Это происходит при помощи трёх функций: LoadLibrary,
GetProcAddress, FreeLibrary. LoadLibrary – загружает dll, GetProcAddress – вызов
функции по её адресу из библиотеки, FreeLibrary – освобождение (выгрузка)
динамически подключенной библиотеки.
Рисунок 4. Код программы с динамическим подключением
В коде программы используется тип Func, который указывает на общий вид
функции и переменная Handle c типом THandle. THandle – дескриптор, то есть
число занимающее место в памяти, являющееся адресом некоторого объекта в
системе. В моём случае к Handle присваивается адрес динамической библиотеки
‘Extremum.dll’.
Если Handle равен 0 программа выводит сообщение об ошибке.
Вызываются адреса и указываются имена подпрограмм при помощи
GetProcAddress, которые затем присваиваются другим переменным при помощи
знака @ - указателя на подпрограмму (получение её адреса).
FreeLibrary(Handle) – освобождает библиотеку.