Когда они загружают библиотеки DLL: неявное связывание против явного связывания

Я думал, что неявное связывание загружает DLL, как только приложение запускается, потому что это также называется «динамическое связывание во время загрузки». Но я нашел некоторые странные объяснения ниже по ссылке здесь (https://msdn.microsoft.com/en-us/library/253b8k2c(VS.80).aspx).

Неявное связывание

Как и остальная часть кода программы, код DLL отображается в адрес
пространство процесса, когда процесс запускается и загружается в
память только при необходимости. В результате код PRELOAD и LOADONCALL
атрибуты, используемые файлами .def для управления загрузкой в ​​предыдущих версиях
Windows больше не имеет значения.

Явная ссылка

Приложение, которое неявно ссылается на многие библиотеки DLL, может работать медленно
начать, потому что Windows загружает все библиотеки DLL при загрузке приложения.
Чтобы улучшить производительность при запуске, приложение может неявно ссылаться на
эти библиотеки нужны сразу после загрузки и ждут, пока
ссылки на другие библиотеки DLL, когда они необходимы.

И еще одно объяснение неявных ссылок отсюда (https://msdn.microsoft.com/en-us/library/151kt790.aspx).

Неявное связывание

Компоновщик Visual C ++ теперь поддерживает отложенную загрузку DLL. это
избавляет вас от необходимости использовать функции Windows SDK LoadLibrary
и GetProcAddress для реализации отложенной загрузки DLL.

До Visual C ++ 6.0 единственный способ загрузить DLL во время выполнения был
используя LoadLibrary и GetProcAddress; операционная система будет загружаться
DLL, когда исполняемый файл или DLL, использующая его, были загружены.

Начиная с Visual C ++ 6.0, при статическом связывании с DLL
компоновщик предоставляет опции для отсрочки загрузки DLL до вызова программы
функция в этой DLL.

Приложение может отложить загрузку DLL с помощью / DELAYLOAD (Задержка загрузки
Импорт) опция компоновщика с вспомогательной функцией (реализация по умолчанию
предоставляется Visual C ++). Вспомогательная функция загрузит DLL при запуске
время по телефону LoadLibrary а также GetProcAddress для тебя.

Я действительно смущен и не знаю, как это понять.

1. Неявное ли связывание загружает DLL при запуске или только при вызове функции в DLL?

2. Это означает, что оба в конце концов похожи, потому что LoadLibrary () вызывается изнутри?

6

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]