2016-08-01 94 views
1

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

我的计划是在嵌入含有其他DLL的位置主要DLL的清单,这样我必须做以下的一种或多种:将当前目录

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

请注意,我已经完成了所有上述各点(事实上1或2与3组合),但它似乎并不完全令人满意。

我的计划有机会吗?有关此主题的MSDN文档对于不可理解性而言似乎是不透明的(即,我试图无视它而遵循它)。

有人将此标记为重复项,并提及完全不同的问题。我知道我的DLL的依赖关系 - 我想要能够做的是有一种方法来通知LoadLibrary我已经放置所有依赖的DLL,而不必更改目录或使用SetDllDirectory。清单似乎是为这项任务设计的,但是文档非常糟糕,我想知道是否需要花费更多的时间来为我付出努力。

+0

如果您事先知道整个依赖关系树,为什么不手动加载依赖关系,逐级加载,从树叶开始并上升到根目录? – cynic

回答

0

我不会以任何方式提供清单文件中其他DDL的路径。

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