Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ShPORY.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
277.05 Кб
Скачать

41 Создание и использование динамических библиотек. Раннее и позднее связывание.

Создание и использование динамических библиотек: Использование динамических библиотек (по-другому - библиотек динамической компоновки) - это способ осуществления модульности в период выполнения программы. Динамическая библиотека (Dynamic Link Library - DLL) позволяет упростить и саму разработку программного обеспечения.В процессе компоновки испольняемого модуля с использованием внешних процедур в него помещаются не сами процедуры, а их нзвания или имена (в зависимости от версии ОС), в связи с этим вместо того, чтобы каждый раз перекомпилировать огромные ЕХЕ-программы, достаточно перекомпилировать лишь отдельный динамический модуль. Вместе с тем, доступ к динамической библиотеке возможен сразу из нескольких исполняемых модулей, что делает многозадачность более гибкой. Структура DLL-модуля подобна структуре ЕХЕ-модуля. По своей функциональности динамическая библиотека очень похожа на оверлей, но название "динамическая библиотека" более удачно.

При создании динамической библиотеки крайне важно указать импортируемые и экспортируемые функции.

Чтобы лучшего понимания DLL поясним варианты связывания при работе линковщика (редактора связей). Во время трансляции связываются имена, указанные в программе как внешние, (EXTERN) с соответствующими именами из библиотек, которые указываются при помощи директивы IMPORTLIB. Такое связывание принято называть ранним (или статическим). Напротив, в случае с динамической библиотекой связывание происходит во время выполнения модуля. Такое связывание принято называть поздним (или динамическим). При этом позднее связывание может происходить в автоматическом режиме в начале запуска программы и при помощи специальных API-функций (см. ниже), по желанию программиста. Познее связывание должна быть явным или неявным. Сказанное иллюстрирует рис. 13. Заметим также, что использование динамической библиотеки экономит дисковое пространство, т.к. представленная в библиотеке процедура содержится лишь один раз, в отличие от процедур, помещаемых в модули из статических библиотек43.

В среде Windows используются два механизма связывания˸ по символьным именам и по порядковым номерам. В первом случае функция, определœенная в динамической библиотеке, идентифицируется по её имени, во втором - по порядковому номеру, который должен быть задан при трансляции (используется в современных ОС Windows).

Раннее и позднее связывание: Раннее связывание означает, что объект и вызов функции связываются между собой на этапе компиляции. Это означает, что вся необходимая информация для того, чтобы определить, какая именно функция будет вызвана, известна на этапе компиляции программы. В качестве примеров раннего связывания можно указать стандартные вызовы функций, вызовы перегруженных функций и перегруженных операторов. Принципиальным достоинством раннего связывания является его эффективность — оно более быстрое и обычно требует меньше памяти, чем позднее связывание. Его недостатком служит невысокая гибкость.

Позднее связывание означает, что объект связывается с вызовом функции только во время исполнения программы, а не раньше. Позднее связывание достигается в С++ с помощью использования виртуальных функций и производных классов. Его достоинством является высокая гибкость. Оно может использоваться для поддержки общего интерфейса, позволяя при этом различным объектам иметь свою собственную реализацию этого интерфейса. Более того, оно помогает создавать библиотеки классов, допускающие повторное использование и расширение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]