LoadLibraryA和相对path

我试图从另一个DLL加载DLL(通过LoadLibraryA)。 这就是问题:

c:\**EXE_DIR**\myExe.exe // this exe load the MY_DLL_N1.dll c:\**DLLS_DIR**\MY_DLL_N1.dll // this dll load the MY_DLL_N2.dll c:\**DLLS_DIR**\MY_DLL_N2.dll 
  1. 该exe加载MY_DLL_N1.dll …罚款。
  2. MY_DLL_N1.dll尝试加载(在代码下面)MY_DLL_N2.dll(相同的目录)…这是我的问题!

 int LoadMyDLL() { // ... // same path of the MY_DLL_N1.dll ... right? handle = LoadLibraryA ("MY_DLL_N2.dll"); // ... } 

这一切….任何帮助,欢迎!

 handle = LoadLibraryA ("MY_DLL_N2.dll"); 

由于您不提供路径,所以使用DLL搜索顺序 。 这将在可执行文件的目录中查找,但不会搜索加载的任何DLLS的目录。 因此找不到DLL。

你有很多选择:

  1. 把所有的DLLS放在与可执行文件相同的目录中。
  2. 调用LoadLibrary时将完整路径传递给DLL。
  3. 调用SetDllDirectory将DLL目录添加到搜索路径。 在加载第一个DLL之前,从可执行文件调用此调用。 一旦你这样做,你将不需要在加载第一个DLL时使用完整的路径。

除非您需要在不同的应用程序之间共享DLLS,否则选项1总是首选。 这使得您可以很容易地确定您加载的DLL是正确的。 这是因为可执行文件目录总是先搜索。

你需要知道的一切都在这里: 动态链接库搜索顺序 。

考虑使用SetDllDirectory将您的DLL路径添加到LoadLibrary搜索路径。