Как запустить без зависимой DLL, когда эта DLL не используется? - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть приложение VC ++, скомпилированное для сторонней библиотеки DLL (конечно, с использованием их файла LIB).

Дело в том, что не каждый сценарий включает в себя код этой DLL, но Windows отказывается запускать приложение, если конкретная DLL отсутствует.

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

Пожалуйста, не обращайте внимания на вопрос, является ли это хорошим вкусом после сбоя приложения после его успешного запуска - я позабочусь об этом.

Как я могу отложить разрешение DLL до тех пор, пока эта DLL действительно не будет загружена?

Спасибо.

1 Ответ

3 голосов
/ 02 февраля 2012

См. Параметр компоновщика /DELAYLOAD :

Компоновщик 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 (Delay Load Import) с вспомогательной функцией (реализация по умолчанию, предоставляемая Visual C ++).Вспомогательная функция загрузит DLL во время выполнения, вызвав для вас LoadLibrary и GetProcAddress.

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