我们有一个使用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
我已经参考上面的帖子了,但是仍然需要一些建议。
答案 0 :(得分:0)
最好将完整路径传递给LoadLibrary,并且永远不要调用SetDllDirectory。
虽然不太可能,但是其他代码插入并在其他线程上运行可以改变这一点。
答案 1 :(得分:0)
简短回答:不,这不是强制性的。
长答案:使用空字符串SetDllDirectory
调用""
只会从默认的DLL搜索顺序中删除当前目录。如果要恢复默认搜索顺序,则需要传递NULL
作为参数。您想要执行此操作的原因是出于安全性的原因。基本上,它有风险的运行时动态链接,因为您不知道搜索顺序的当前状态。这就是为什么重置搜索订单状态的良好做法。在每次LoadLibrary
调用后重置搜索顺序状态的决定取决于您是否信任该库。
请阅读以下文章了解更多详情: