LoadLibrary是否解析环境变量,例如%windir%

时间:2011-09-13 17:55:31

标签: c winapi loadlibrary

如果我 LoadLibrary("%windir%\\system32\\ole32.dll") 这意味着Windows只会从“c:\ windows \ system32 \ ole32.dll”加载? C中的LoadLibrary()也了解环境变量吗?

2 个答案:

答案 0 :(得分:6)

正如Serge所说并经过仔细测试,LoadLibrary不会在路径中进行环境变量替换。

但是,Windows API中有一个函数可以替换字符串中的环境变量:ExpandEnvironmentStrings()。您可以在调用LoadLibrary()之前在路径上执行所需的替换。

答案 1 :(得分:4)

docs for LoadLibrary明确指出:

  

如果字符串指定了完整路径,则该函数仅搜索该路径   模块的路径。

那就是说,他们没有提到对环境变量替代的支持。我非常怀疑它们是否支持环境变量替换:这是一个shell特性,而不是内核API。

BTW,这意味着LoadLibrary()会将%windir%\blah.dll视为相对路径,因为它不以驱动器号或UNC路径开头。因此,它会查看整个系列的目录,寻找一个名为%windir%的子目录,它不太可能找到!

我给了它一个快速测试:它证实了我的意见。错误= 126:找不到指定的模块