Ранее было изучено, как можно создать функциональность, полезную для нескольких приложения и как можно упаковать ее в библиотечный файл, который можно связать в этими приложениями. Сейчас будет изучено, как сделать то же, но только c более динамичным пакетом.
Часто семейство приложений имеет некоторую общую функциональность. Если поместить эту распределенную функциональность в DLL вместо модулей библиотек, то все приложения могут ее использовать путем копирования DLL, а не дублированием модулей в каждом приложении, что сохраняет дисковое пространство.
Сейчас, будет изучено:
- Разные типы DLL, которые можно создать в Visual C++ и какое определение типа чему соответствует.
- Как построить оба типа DLL и разные подходы для различных типов DLL.
- Как использовать функциональность обоих типов DLL в Visual C++ приложении.
- Как определить, когда приложение нуждается в перелинковке при изменениях в DLL, используемых в приложении.
Зачем создавать DLL?
Динамический связывание библиотек (DLL) было введено Microsoft в начале Windows. DLL подобны модулям библиотеки по содержанию функциональности, упакованной для использования в приложениях. Разница заключается в связывании приложения с библиотекой. C модулем библиотеки (LIB) приложение связывается во время компиляции и настройки процесса. Функциональность библиотечного файла становится частью исполнимого файла приложения. C DLL приложение связывается после запуска приложения. Библиотечный файл остается отдельным файлом, вызываемым приложением.
Имеются некоторые причины для создание DLL вместо модулей библиотечных файлов. Первая, уменьшение размера исполнимых файлов приложений помещением функциональности, используемой многими приложениями в DLL, которые распределены для всех приложений. Можно обновлять и изменять функциональность в DLL без обновления исполнимого приложения (приняв, что экпортируемый интерфейс для DLL не изменен). Наконец, можно использовать DLL на другом языке программирования Windows, что делает эту функциональность, доступной широкому кругу программистов, не только любителей Visual C++.
Создание и использование DLL
DLL являются файлами библиотек c компилированным кодом, который можно использовать другими приложениями. DLL передает функции и классы в приложения экспортом функций. Когда функция экспортируется, то она добавляется к таблице, включенной в DLL. Это таблица содержит адреса всех экспортируемых функций, содержащихся в DLL, и это используется для определения и вызова каждой функции. Некоторые функции не экспортируются и не добавляются в эту таблицу. Они не могут быть видимы или вызваны вне приложения или DLL.
Приложение может вызвать функции в DLL двумя способами. Чаще встречается метод вызова этих функций через определение