МИНИСТЕРСТВО ОБРАЗОВАНИЯ МОСКОВСКОЙ ОБЛАСТИ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ЛУХОВИЦКИЙ АВИАЦИОННЫЙ ТЕХНИКУМ Специальность 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) – освобождает библиотеку.