Динамическая библиотека ссылок (DLL) в операционной системе Windows работает за счёт динамического связывания. 1 В отличие от статического связывания, при котором компоновщик копирует код функции библиотеки в каждый модуль, который её вызывает, при динамическом связывании общий код помещается в один отдельный файл. 12
Существует два метода вызова функции в библиотеке DLL: 1
- Динамическое связывание во время загрузки. 1 Модуль выполняет явные вызовы экспортированных функций DLL, как если бы они были локальными. 1 Для этого необходимо связать модуль с библиотекой импорта для библиотеки DLL, содержащей функции. 1 Библиотека импорта предоставляет системе сведения, необходимые для загрузки библиотеки DLL и поиска экспортированных функций DLL при загрузке приложения. 1
- Динамическое связывание во время выполнения. 1 Модуль использует функцию LoadLibrary или LoadLibraryEx для загрузки библиотеки DLL во время выполнения. 1 После загрузки библиотеки DLL модуль вызывает функцию GetProcAddress, чтобы получить адреса экспортированных функций DLL. 1
Некоторые особенности работы DLL в Windows:
- Сопоставление с виртуальным адресным пространством. 1 Каждый процесс, загружающий библиотеку DLL, сопоставляет её с виртуальным адресным пространством. 1 После загрузки библиотеки DLL в виртуальный адрес процесс может вызывать экспортированные функции DLL. 1
- Поддержка количества ссылок. 1 Система поддерживает количество ссылок на каждый процесс для каждой библиотеки DLL. 1 Когда поток загружает библиотеку DLL, число ссылок увеличивается на единицу. 1 Когда процесс завершается или когда количество ссылок становится нулевым (только для динамической компоновки во время выполнения), библиотека DLL выгружается из виртуального адресного пространства процесса. 1