Windows中的延迟加载DLL:我可以动态选择要查找的DLL名称吗? (C ++)

 收藏

我有一个从foo.dll调用函数的库。

在我的MSVS设置中,我延迟加载foo.dll并在尝试调用其功能之前手动检查其存在(这样一来,如果计算机上不存在该文件,则我的库不会崩溃)。

如果DLL存在检查成功,并且我调用了它的函数,则DLL将由Windows延迟加载助手自动加载,并且一切正常。

但是,在我的用户计算机的50%上,foo.dll被重命名为bar.dll。即使我调用LoadLibrary(“ path \ bar.dll”)并成功执行,我的库仍会崩溃,因为当我调用函数之一时,延迟加载帮助程序仍尝试加载foo.dll。

我使用了十六进制编辑器来查看库的内容,并在一个位置明确命名了“ foo.dll”。如果我使用十六进制编辑器将该条目重命名为“ bar.dll”,则当bar.dll是用户计算机上DLL的名称时(并且在foo.dll为名称时崩溃),我的库将正常运行。因此,问题似乎出在延迟加载帮助程序上,它试图将显式命名的DLL加载到我的库中。

我如何才能告诉延迟加载帮助程序,所讨论的DLL的名称与我的已编译库中的显式文件名不匹配?

回复