Определение существования DLL перед ее использованием - PullRequest
1 голос
/ 17 ноября 2009

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

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

1 голос
/ 17 ноября 2009

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

1 голос
/ 17 ноября 2009

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

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