【发布时间】:2020-07-07 19:49:48
【问题描述】:
我有一个从 foo.dll 调用函数的库。
在我的 MSVS 设置中,我延迟加载 foo.dll 并在尝试调用其函数之前手动检查它是否存在(这样,如果机器上不存在它,我的库就不会崩溃)。
如果 DLL 存在性检查成功并且我调用了它的函数,则 Windows 延迟加载助手会自动加载 DLL,并且一切正常。
但是,在 50% 的用户计算机上,foo.dll 被重命名为 bar.dll。即使我调用 LoadLibrary("path\bar.dll") 并且它成功了,我的库仍然会崩溃,因为当我调用其中一个函数时,延迟加载帮助程序仍然会尝试加载 foo.dll。
我使用十六进制编辑器查看库的内容,并在一个位置明确命名了“foo.dll”。如果我使用十六进制编辑器将该条目重命名为“bar.dll”,当 bar.dll 是用户机器上的 DLL 的名称时,我的库运行完美(并且在 foo.dll 是名称的情况下崩溃)。所以似乎问题在于延迟加载帮助程序试图在我的库中加载显式命名的 DLL。
我如何告诉延迟加载帮助程序,有问题的 DLL 的名称与我编译的库中的显式文件名不匹配?
【问题讨论】:
标签: c++ windows dll load delay