где LoadLibrary A ищет файл?

В моем коде используется LoadLibraryA("someDLL.dll"); По какому пути он начинает поиск файла someDLL.dll? И еще вопрос: регистрозависима ли функция LoadLibraryA? Я имею в виду, если у меня есть SomeDLL.dll, то она его не загрузит?


person Yakov    schedule 25.12.2012    source источник
comment
Если я правильно помню, в онлайн-документации много говорится о стратегии поиска. Я бы посмотрел там. Что касается учета регистра, это должно быть легко проверить самостоятельно, если это не указано в документах...   -  person tmpearce    schedule 25.12.2012


Ответы (2)


Статья библиотеки MSDN Поиск в библиотеке Dynamic-Link Порядок определяет порядок поиска для настольных приложений при включенном SafeDllSearchMode, который используется по умолчанию, начиная с Windows XP SP2:

  1. Каталог, из которого загружено приложение.
  2. Системный каталог. Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу.
  3. 16-битный системный каталог. Нет функции, которая получает путь к этому каталогу, но он ищется.
  4. Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.
  5. Текущий каталог.
  6. Каталоги, указанные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра App Paths. Ключ App Paths не используется при вычислении пути поиска DLL.
person Samuli Hynönen    schedule 25.12.2012

LoadlLibrary указывает порядок поиска в примечаниях:

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

Если в параметре lpFileName не указано расширение имени файла, добавляется расширение библиотеки по умолчанию .dll. Однако строка имени файла может содержать завершающую точку (.), чтобы указать, что имя модуля не имеет расширения. Если путь не указан, функция ищет загруженные модули, базовое имя которых совпадает с базовым именем загружаемого модуля. Если имя совпадает, загрузка завершается успешно. В противном случае функция ищет файл. [...]

Дополнительные сведения о порядке поиска DLL см. в разделе Порядок поиска в библиотеке Dynamic-Link.

Имена файлов не чувствительны к регистру, поэтому имена файлов NTFS и FAT чувствительны. Это основное правило чтобы не учитывать регистр:

Соглашения об именах

Следующие основные правила позволяют приложениям создавать и обрабатывать допустимые имена для файлов и каталогов независимо от файловой системы: [...]

Не предполагайте чувствительность к регистру.

person Roman R.    schedule 25.12.2012