【问题标题】:Dll loading orderdll加载顺序
【发布时间】:2010-03-04 19:44:43
【问题描述】:

如果我在 A.dll 中有全局变量,这取决于 B.dll 中的全局变量,是否保证 B.dll 将在 A.dll 之前加载?我在 Visual Studio 中制作了两个示例 dll 项目,并将 A.dll 与 B.dll 链接起来,似乎首先加载了 B.dll。那么这种行为是否得到保证?

【问题讨论】:

    标签: winapi visual-c++ dll


    【解决方案1】:

    这种行为是由操作系统保证的,否则就不可能编写正确的 dll 加载代码。特别是,如果A.dll 导入B.dll,那么当动态链接器尝试加载A.dll 时,它会看到该依赖关系并首先将B.dll 加载到进程中。

    【讨论】:

    • 在 msdn 上说我无法从 DllMain 中的用户、Shell 和 COM dll 调用函数。如果保证 User、Shell 和 COM dll 将在我之前加载(如上面的示例中 B.dll 在 A.dll 之前加载),那么在我的 DllMain 中调用这些系统 dll 应该不会出错dll。当然我不明白一些东西:(我错过了什么?
    • 这不是你不能调用这些函数的原因。真正的动机更复杂:blogs.msdn.com/oldnewthing/archive/2004/01/27/63401.aspx
    • 创建具有循环依赖关系的 dll 是可能且合法的。在这种情况下,所有的赌注都没有加载顺序。
    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2012-11-02
    • 2016-09-27
    相关资源
    最近更新 更多