【发布时间】:2016-08-01 22:17:26
【问题描述】:
我已经构建了一个使用大量其他 DLL 的 DLL。一个外部应用程序使用 LoadLibrary 来加载我的主 DLL。一个这样的例子是 Excel(主 DLL 具有扩展名 .XLL),另一个是 Python(主 DLL 具有扩展名 .PYD)。
我的计划是在主 DLL 中嵌入一个清单,其中包含其他 DLL 的位置,以便我不必执行以下一项或多项操作:
- 在应用程序调用 LoadLibrary 之前将当前目录设置为主 DLL 的目录。
- 在应用程序调用 LoadLibrary 之前调用 SetDllDirectory。
- 要求所有 DLL 与主 DLL 位于同一目录中。
请注意,我已经在各个方面完成了上述所有操作(实际上是 1 或 2 与 3 的组合),但似乎并不完全令人满意。
我的计划有机会吗?关于这个主题的 MSDN 文档似乎不透明到难以理解的地步(即我试图遵循它但没有成功)。
有人将此标记为重复,并提到了一个完全不同的问题。我知道我的 DLL 的依赖关系 - 我想要做的是有一种方法可以通知 LoadLibrary 我将所有依赖的 DLL 放置在哪里,而无需更改目录或使用 SetDllDirectory。清单似乎是为这项任务设计的,但文档太糟糕了,我想知道再努力几个小时是否值得我付出努力。
【问题讨论】:
-
如果你事先知道整个依赖树,为什么不手动加载依赖,一层一层,从叶子开始,一直到根呢?