Настройка пути к библиотеке для консольных приложений win32 - PullRequest
3 голосов
/ 29 марта 2009

Я получаю сообщение об ошибке «dll not found: перезапуск приложения может решить проблему» при попытке выполнить простое консольное приложение win32 «HelloWorld». Я знаю местоположение .dll. Как указать его местоположение при выполнении .exe из командной строки?

PS: копирование .dll в текущий каталог .exe, похоже, решает проблему, но этот подход не подходит в этом случае.

Ответы [ 4 ]

5 голосов
/ 29 марта 2009

Загрузка DLL происходит глубоко в сантехнике окон.

Если DLL не найдена в том же каталоге, что и приложение, PATH автоматически сканируется, чтобы найти каталог.

Итак, самый простой ответ на вашу проблему - добавить каталог, содержащий DLL, в вашу PATH. В зависимости от того, когда DLL должен быть загружен вашим кодом, вы можете (временно) изменить PATH из вашего приложения «HelloWorld».

1 голос
/ 20 марта 2014

От: http://msdn.microsoft.com/en-us/library/7d83bc18.aspx

При неявном и явном связывании Windows сначала ищет «известные библиотеки DLL», такие как Kernel32.dll и User32.dll. Windows тогда ищет библиотеки DLL в следующей последовательности:

  1. Каталог, в котором находится исполняемый модуль для текущего процесса.

  2. Текущий каталог.

  3. Системный каталог Windows. Функция GetSystemDirectory извлекает путь к этому каталогу.

  4. Каталог Windows. Функция GetWindowsDirectory извлекает путь к этому каталогу.

  5. Каталоги, перечисленные в переменной среды PATH.

1 голос
/ 22 сентября 2009

Чтобы вручную добавить постоянный путь к ПУТИ Windows (навсегда = до его удаления), щелкните правой кнопкой мыши Мой компьютер> Свойства> Дополнительно> Переменные среды> Системные переменные> Путь> Изменить> Значение переменной, добавьте точку с запятой (что означает "в дополнение ко всему ранее") и вставьте полный путь вашей DLL.

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

1 голос
/ 29 марта 2009

В документации для LoadLibraryEx есть некоторые обсуждения того, как Windows ищет вашу dll. Вы можете попробовать использовать флаг LOAD_WITH_ALTERED_SEARCH_PATH, если вы можете создать полный путь к вашей DLL или использовать функцию SetDllDirectory , чтобы добавить каталог в путь поиска.

...