【问题标题】:Why isn't a full file path required to load a dll? In what situation would this functionality be beneficial?为什么加载 dll 不需要完整的文件路径?这个功能在什么情况下会有用?
【发布时间】:2011-04-21 16:02:34
【问题描述】:

为什么 Windows 在调用 LoadLibrary 时不需要完整的文件路径,或者对于带有已注册 DLL 的 CLSID 等。在什么情况下,人们不得不依靠 DLL 搜索顺序来查找 dll 会从中受益?

我的意思是,诸如 %SystemRoot% 或 %ProgramFiles% 之类的变量可以将您带到适当的文件夹,而 .\ 会将您留在当前目录中。那么为什么要允许含糊不清呢?

【问题讨论】:

  • 这可能要追溯到 DOS 支持目录之前的日子。更实际地说,如果您必须在某处指定完整路径,隐式链接将如何工作?
  • 隐式链接,很公平。我没有考虑到这一点。我可以看到,跟踪哪个目录中需要的内容很痛苦。
  • 您也不知道用户系统上可能存在特定 dll 的位置。对于系统 dll,清单将确保使用正确的版本,而不管它实际存储在哪里。

标签: windows dllimport dll loadlibrary


【解决方案1】:

对于与 GetProcAddress() 的显式链接,我认为应该尽可能使用 DLL 的绝对路径。

对于与 .lib 文件的隐式链接,必须在链接时确定 DLL 的名称,排除绝对路径。

将 DLL 放在与可执行文件相同的目录中,在 %Program Files% 下并受 UAC 保护,并使用新的 DLL 搜索顺序是最安全的。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2011-06-16
    • 2020-03-11
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2023-03-03
    相关资源
    最近更新 更多