SetDllDirectory,重置(强制)?

时间:2015-12-11 02:39:09

标签: c++ dll

我们有一个使用SetDllDirectory的应用程序

exe
 |
 |--DLLDirectory\Any1.dll
 |--DLLDirectory\Any2.dll

Any1.dll,在LoadLibrary之前调用SetDllDirectory(" DLLDirectory") -----此时,我们应该调用SetDllDirectory("")
Any2.dll,在LoadLibrary之前调用SetDllDirectory(" DLLDirectory") ---->在这一点上,我们应该调用SetDllDirectory("")

应用程序加载Any#.dll

SetDllDirectory("DllDirectory")
LoadLibrary(Any1.dll)
// SetDllDirectory("") ?
SetDllDirectory("DllDirectory")
LoadLibrary(Any2.dll)
// SetDllDirectory("") ?

我怀疑,是否需要在LoadLibrary之后重置dll目录?如果必须重置,如果其他人如:Any1.dll调用GetDllDirectory

SetDllDirectory function
Determine the loaded path for DLLs
我已经参考上面的帖子了,但是仍然需要一些建议。

2 个答案:

答案 0 :(得分:0)

最好将完整路径传递给LoadLibrary,并且永远不要调用SetDllDirectory。

虽然不太可能,但是其他代码插入并在其他线程上运行可以改变这一点。

答案 1 :(得分:0)

简短回答:不,这不是强制性的。

长答案:使用空字符串SetDllDirectory调用""只会从默认的DLL搜索顺序中删除当前目录。如果要恢复默认搜索顺序,则需要传递NULL作为参数。您想要执行此操作的原因是出于安全性的原因。基本上,它有风险的运行时动态链接,因为您不知道搜索顺序的当前状态。这就是为什么重置搜索订单状态的良好做法。在每次LoadLibrary调用后重置搜索顺序状态的决定取决于您是否信任该库。

请阅读以下文章了解更多详情: