【问题标题】:Finding dependent DLLs when DLL called by LoadLibraryLoadLibrary 调用 DLL 时查找依赖 DLL
【发布时间】:2016-08-01 22:17:26
【问题描述】:

我已经构建了一个使用大量其他 DLL 的 DLL。一个外部应用程序使用 LoadLibrary 来加载我的主 DLL。一个这样的例子是 Excel(主 DLL 具有扩展名 .XLL),另一个是 Python(主 DLL 具有扩展名 .PYD)。

我的计划是在主 DLL 中嵌入一个清单,其中包含其他 DLL 的位置,以便我不必执行以下一项或多项操作:

  1. 在应用程序调用 LoadLibrary 之前将当前目录设置为主 DLL 的目录。
  2. 在应用程序调用 LoadLibrary 之前调用 SetDllDirectory。
  3. 要求所有 DLL 与主 DLL 位于同一目录中。

请注意,我已经在各个方面完成了上述所有操作(实际上是 1 或 2 与 3 的组合),但似乎并不完全令人满意。

我的计划有机会吗?关于这个主题的 MSDN 文档似乎不透明到难以理解的地步(即我试图遵循它但没有成功)。

有人将此标记为重复,并提到了一个完全不同的问题。我知道我的 DLL 的依赖关系 - 我想要做的是有一种方法可以通知 LoadLibrary 我将所有依赖的 DLL 放置在哪里,而无需更改目录或使用 SetDllDirectory。清单似乎是为这项任务设计的,但文档太糟糕了,我想知道再努力几个小时是否值得我付出努力。

【问题讨论】:

  • 如果你事先知道整个依赖树,为什么不手动加载依赖,一层一层,从叶子开始,一直到根呢?

标签: c++ windows dll


【解决方案1】:

我没有办法在清单文件中提供其他 DDL 的路径。

但也许解决这个问题的一种方法是使用 Path 环境变量。
在调用 LoadLibrary 之前,将其他 DLL 的所有路径添加到路径环境变量中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多