Когда операционная система Windows загружает DLL в память?
Если вы неявно связали свой EXE с DLL через файл .lib, как вы обычно это делаете для большинства оконapis, такой как user32.dll и kernel32.dll, тогда поведение defautl для загрузки DLL при запуске процесса и до вызова функции WinMain / main.Ниже приведена информация о задержке загрузки ...
Если одна DLL зависит от другой, она сначала загрузит свои зависимости, если они еще не загружены.
Если вы явно загружаете код через DLL (LoadLibrary, CoCreateInstance и т. Д.), Затем он будет загружен при выполнении этих вызовов
Произойдет ли операция при запуске приложения или когда приложение впервые вызывает одну из процедур в DLL?
Вы можете получить это обоими способами.По умолчанию DLL загружается при запуске приложения.Если вы использовали флаг компоновщика / DELAYLOAD , DLL может отложить загрузку до тех пор, пока она действительно не понадобится.Это «лучшее усилие» - если существуют странные зависимости экспорта с глобальными переменными, он может не работать.
Может ли DLL выгружаться после загрузки?
Короткий ответ «нет» для неявных зависимостей DLL, которые вы связали.FreeLibrary и CoFreeUnusedLibrary могут использоваться для вызовов LoadLibrary / CoCreateInstance.