Работа библиотеки динамических библиотек DLL в Windows основана на том, что в момент выполнения программы загружается вся библиотека целиком. 2 Благодаря этому разные процессы могут пользоваться совместно одними и теми же библиотеками, находящимися в памяти. 2
При запуске приложение пытается найти все файлы DLL, неявно подключённые к приложению, и поместить их в область оперативной памяти, занимаемую данным процессом. 2 Поиск файлов DLL операционной системой осуществляется в следующей последовательности: каталог, в котором находится ЕХЕ-файл, текущий каталог процесса, системный каталог Windows. 2 Если библиотека DLL не обнаружена, приложение выводит диалоговое окно с сообщением о её отсутствии и путях, по которым осуществлялся поиск. 2 Затем процесс отключается. 2 Если нужная библиотека найдена, она помещается в оперативную память процесса, где и остаётся до его окончания. 2 Теперь приложение может обращаться к функциям, содержащимся в DLL. 2
При динамической загрузке DLL первое, что необходимо сделать, — это поместить модуль библиотеки в память процесса. 2 Данная операция выполняется с помощью функции ::LoadLibrary, имеющей единственный аргумент — имя загружаемого модуля. 2 Если файл обнаружен и библиотека успешно загрузилась, функция ::LoadLibrary возвращает её дескриптор, который используется для доступа к функциям библиотеки. 2
Для каждой DLL-библиотеки система ведёт счётчик использования. 4 Содержимое этого счётчика увеличивается при очередной загрузке библиотеки в память и уменьшается при освобождении библиотеки. 4 Когда содержимое счётчика использования DLL-библиотеки станет равным нулю, библиотека будет выгружена из памяти. 4