Определение существования DLL перед ее использованием

StackOverflow https://stackoverflow.com/questions/1747463

Вопрос

Использование Visual C++ 2008 Express Edition.Я связываю свое приложение с библиотекой импорта (.lib) для DLL, которая может присутствовать или отсутствовать в целевой системе.Прежде чем спросить:Я не могу распространять DLL вместе с моим приложением.

Если DLL отсутствует, то как только я вызываю функцию из DLL (но не раньше!), я получаю сообщение типа

Не удалось запустить это приложение, поскольку файл SomeLibrary.dll не найден.Переустановка приложения может решить проблему.

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

Это простой LoadLibrary позвонить достаточно?Если нет, что еще мне нужно сделать?Можно ли это вообще сделать?

Обновлять:Конечно, я могу использовать LoadLibrary, а потом GetProcAddress для каждой функции, которую я хочу использовать.Но это хлопотно, и я надеялся избежать этого и просто использовать вместо этого предоставленную библиотеку импорта.

Это было полезно?

Решение

Для этого предназначена опция компоновщика DelayLoad, но я не знаю, поддерживает ли ее версия Express.

Другие советы

Нет, LoadLibrary() это именно то, что вы хотите.Единственным последствием его использования является сложность настройки указателей функций в DLL при успешной загрузке DLL, но этот процесс хорошо описан в других местах в сети.

Если пойдешь, проверь здесь (MSDN) вы увидите это, когда LoadLibrary не загружается, функция возвращает значение NULL, и вы даже можете проверить конкретную ошибку (это должен быть файл, который не найден), используя GetLastError функция.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top