Некоторые основные вопросы о файле DLL - PullRequest
0 голосов
/ 22 сентября 2010
  1. Когда операционная система Windows загружает DLL в память?
  2. Эта операция происходит при запуске приложения или когда приложение впервые вызывает одну из процедур в DLL?
  3. Может ли DLL выгружаться после загрузки?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

Когда операционная система 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.

0 голосов
/ 22 сентября 2010

В Windows API вы можете явно контролировать загрузку и выгрузку .dll.

См. LoadLibrary и FreeLibrary в качестве отправной точки.

В зависимости от языка / инструментов, которые вы используете, многие детали загрузки библиотек позаботятся о вас, но обычно вы все равно можете получить явный контроль, если вы действительно этого хотите.

0 голосов
/ 22 сентября 2010

Я собираюсь предположить, что мы говорим .net.Это гарантированно произойдет до того, как вам понадобится код.Но вы можете использовать позднюю привязку, чтобы сделать это в другое время.Смотрите эту страницу текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...