Разве LoadLibrary анализирует переменные среды, такие как% windir% - PullRequest
5 голосов
/ 13 сентября 2011

Если я сделаю LoadLibrary("%windir%\\system32\\ole32.dll"), значит ли это, что Windows будет загружаться ТОЛЬКО из "c: \ windows \ system32 \ ole32.dll"?Также понимает ли LoadLibrary () в C переменную среды?

Ответы [ 2 ]

6 голосов
/ 13 сентября 2011

, как сказал Серж и тщательно протестировал, LoadLibrary не выполняет подстановку переменных среды в path.

однако в Windows API есть функция для замены переменных среды в строках: ExpandEnvironmentStrings(). Вы можете выполнить необходимую замену на вашем пути перед вызовом LoadLibrary().

4 голосов
/ 13 сентября 2011

В документах для LoadLibrary четко указано, что:

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

Тем не менее, они не упоминают поддержку замены переменных среды. Я серьезно сомневаюсь, что они поддерживают подстановку переменных среды: это функция оболочки, а не API ядра.

Кстати, это означает, что LoadLibrary() будет рассматривать %windir%\blah.dll как относительный путь, поскольку он не начинается с буквы диска или пути UNC. Следовательно, он будет просматривать всю серию каталогов, ища подкаталог с именем %windir%, который вряд ли найдется!

Я быстро его проверил: это подтверждает мое мнение. Ошибка = 126: Указанный модуль не найден .

...