以编程方式自定义DLL搜索目录

时间:2014-04-03 23:16:37

标签: c++ dll

我正在用C ++编写DLL。我的DLL将与第三方软件一起运行。它加载另一个DLL(让我们称之为LDLL),这个LDLL使用openssl。

但是每当我的DLL尝试加载我的LDLL时,它都会返回错误代码126。

我用dependency walker运行了我的LDLL,它显示缺少openssl dll(ssleay.dll和libeay.dll)。它正在某些standard folders中搜索这些内容。

有没有办法以编程方式在LDLL中包含我自己的搜索路径以在我自己的搜索路径中加载openssl DLL?

2 个答案:

答案 0 :(得分:3)

来自the LoadLibrary documentation

  

可以使用the SetDllDirectory function更改搜索路径。建议使用此解决方案,而不是使用SetCurrentDirectory或硬编码DLL的完整路径。

但要注意:

  

每次调用SetDllDirectory函数时,它都会替换先前SetDllDirectory调用中指定的目录。要指定多个目录,请使用AddDllDirectory功能并使用LoadLibraryEx致电LOAD_LIBRARY_SEARCH_USER_DIRS

另一种方法是使用这些库的延迟加载,并在使用它们的函数之前使用LoadLibraryLoadLibraryEx显式加载它们。

答案 1 :(得分:0)

一个简单的google for" Windows DLL搜索路径"带给我们here,我引用:

  

通过隐式和显式链接,Windows首先搜索"已知的DLL",例如Kernel32.dll和User32.dll。 Windows然后按以下顺序搜索DLL:

     
      
  1. 当前进程的可执行模块所在的目录。

  2.   
  3. 当前目录。

  4.   
  5. Windows系统目录。 GetSystemDirectory函数检索此目录的路径。

  6.   
  7. Windows目录。 GetWindowsDirectory函数检索此目录的路径。

  8.   
  9. PATH环境变量中列出的目录。

  10.         

    请注意   不使用LIBPATH环境变量。