【发布时间】:2009-09-10 07:42:46
【问题描述】:
我的产品由两个 dll 组成(为了清楚起见,A.dll 和 B.dll),A.dll 依赖于 B.dll。 A 和 B dll 都在同一个文件夹中(比如 c:\app)。同时旧版本的 B.dll 位于 Windows\System32 文件夹中。当我尝试从命令提示符运行以下命令时(当前文件夹是 c:\app):
rundll32.exe "c:\app\A.dll",DoWork
我收到错误,因为 rundll32 使用 System32 文件夹中的旧版本 B.dll。我尝试使用 A.dll 库的 DllMain 函数中的 SetDllDirectory API 将 c:\app 文件夹添加到搜索路径,但它对我不起作用。
我找不到有关 rundll32 内部结构的任何有用且完整的信息或有关 dll 加载顺序的任何信息。
是否可以在此部署配置中成功执行 rundll32? (我的意思是从 c:\app 文件夹加载新的 B.dll 版本)。
【问题讨论】:
-
看来我找到了解决方案。我已将 /DELAYLOAD:"B.dll" 开关添加到 A.dll 项目中的链接器选项。在使用 SetDllDirectory API 的那个技巧开始工作并且 rundll32 从 c:\app 文件夹加载新版本的 B.dll 之后。谢谢各位!
标签: c++ deployment