LoadLibrary是否解析%windir%等环境变量

发布于 2024-12-04 18:43:52 字数 170 浏览 3 评论 0 原文

如果我这样做 LoadLibrary("%windir%\\system32\\ole32.dll") 是否意味着 Windows 将仅从“c:\windows\system32\ole32”加载.dll”? C 中的 LoadLibrary() 是否理解环境变量?

If I do LoadLibrary("%windir%\\system32\\ole32.dll") does that mean Windows will ONLY load from "c:\windows\system32\ole32.dll" ? Also does LoadLibrary() in C understand the environment variable?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福%小乖 2024-12-11 18:43:52

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

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

as Serge said and carefully tested, LoadLibrary does not do environment variable substitution in path.

however, there is a function in the windows API to replace environment variables in strings: ExpandEnvironmentStrings(). you can perform the required substitution on your path before calling LoadLibrary().

他夏了夏天 2024-12-11 18:43:52

LoadLibrary 文档明确指出:

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

也就是说,他们没有提到对环境变量替换的支持。我严重怀疑它们是否支持环境变量替换:这是一项 shell 功能,而不是内核 API 功能。

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

我快速测试了一下:它证实了我的观点。错误 = 126:找不到指定的模块

The docs for LoadLibrary clearly state that:

If the string specifies a full path, the function searches only that
path for the module.

That said, they don't mention support for environment variables substitution. I seriously doubt they do support environment variables substitution: That's a shell feature, not a kernel API one.

BTW, that means LoadLibrary() would consider %windir%\blah.dll as a relative path since it doesn't start with a drive letter or a UNC path. Hence it would look through the whole series of directories, looking for a subdir named %windir%, which it's not likely to find!

I gave it a quick test: It confirms my opinion. Error = 126 : The specified module could not be found.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文