我正在用C ++编写DLL。我的DLL将与第三方软件一起运行。它加载另一个DLL(让我们称之为LDLL),这个LDLL使用openssl。
但是每当我的DLL尝试加载我的LDLL时,它都会返回错误代码126。
我用dependency walker运行了我的LDLL,它显示缺少openssl dll(ssleay.dll和libeay.dll)。它正在某些standard folders中搜索这些内容。
有没有办法以编程方式在LDLL中包含我自己的搜索路径以在我自己的搜索路径中加载openssl DLL?
答案 0 :(得分:3)
来自the LoadLibrary
documentation:
可以使用the
SetDllDirectory
function更改搜索路径。建议使用此解决方案,而不是使用SetCurrentDirectory
或硬编码DLL的完整路径。
但要注意:
每次调用
SetDllDirectory
函数时,它都会替换先前SetDllDirectory
调用中指定的目录。要指定多个目录,请使用AddDllDirectory
功能并使用LoadLibraryEx
致电LOAD_LIBRARY_SEARCH_USER_DIRS
。
另一种方法是使用这些库的延迟加载,并在使用它们的函数之前使用LoadLibrary
或LoadLibraryEx
显式加载它们。
答案 1 :(得分:0)
一个简单的google for" Windows DLL搜索路径"带给我们here,我引用:
通过隐式和显式链接,Windows首先搜索"已知的DLL",例如Kernel32.dll和User32.dll。 Windows然后按以下顺序搜索DLL:
当前进程的可执行模块所在的目录。
当前目录。
Windows系统目录。
GetSystemDirectory
函数检索此目录的路径。Windows目录。 GetWindowsDirectory函数检索此目录的路径。
- 醇>
PATH环境变量中列出的目录。
请注意 不使用LIBPATH环境变量。