Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LoadLibraryA和相对路径_C++_Windows_Winapi_Dll - Fatal编程技术网

C++ LoadLibraryA和相对路径

C++ LoadLibraryA和相对路径,c++,windows,winapi,dll,C++,Windows,Winapi,Dll,我正试图通过LoadLibraryA从另一个dll加载dll。 这就是问题所在: 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 exe加载MY_DLL_N1.DLL。。。好的 MY_DLL_N1.DLL尝

我正试图通过LoadLibraryA从另一个dll加载dll。 这就是问题所在:

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
exe加载MY_DLL_N1.DLL。。。好的 MY_DLL_N1.DLL尝试在代码下面加载MY_DLL_N2.DLL相同的目录。。。这就是我的问题!
就这些。。。。欢迎任何帮助

您需要知道的所有信息都位于此处:


考虑使用将DLL路径添加到LoadLibrary搜索路径

您需要知道的所有信息都位于此处:

handle = LoadLibraryA ("MY_DLL_N2.dll");
考虑使用将DLL路径添加到LoadLibrary搜索路径

handle = LoadLibraryA ("MY_DLL_N2.dll");
由于未提供路径,因此使用。这将在可执行文件的目录中查找,但不会在加载的任何DLL的目录中搜索。因此,无法找到DLL

您有许多选择:

将所有DLL与可执行文件放在同一目录中。 调用LoadLibrary时传递DLL的完整路径。 调用将DLL目录添加到搜索路径。在加载第一个DLL之前,从可执行文件进行此调用。一旦这样做了,在加载第一个DLL时就不需要使用完整路径。 除非您需要在不同的应用程序之间共享DLL,否则始终首选选项1。这使您可以轻松地确保加载的DLL是正确的。这是因为始终首先搜索可执行目录

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

您有许多选择:

将所有DLL与可执行文件放在同一目录中。 调用LoadLibrary时传递DLL的完整路径。 调用将DLL目录添加到搜索路径。在加载第一个DLL之前,从可执行文件进行此调用。一旦这样做了,在加载第一个DLL时就不需要使用完整路径。
除非您需要在不同的应用程序之间共享DLL,否则始终首选选项1。这使您可以轻松地确保加载的DLL是正确的。这是因为始终首先搜索可执行目录

您希望Windows为您找到正确的DLL,这是在要求DLL地狱。你明白了。Windows无意解决此问题。将DLL存储在与EXE相同的目录中应该始终是首选。故意把它们放在其他地方让另一个程序使用相同的DLL是最糟糕的DLL地狱。您将更新DLL以修复一个程序中的错误。并在另一个程序中引发错误。不要这样做。你希望Windows为你找到合适的DLL,这是在要求DLL地狱。你明白了。Windows无意解决此问题。将DLL存储在与EXE相同的目录中应该始终是首选。故意把它们放在其他地方让另一个程序使用相同的DLL是最糟糕的DLL地狱。您将更新DLL以修复一个程序中的错误。并在另一个程序中引发错误。不要这样做。AppPath有什么相关性?据我所知,它们不会影响DLL搜索。我错了吗?@DavidHeffernan-你是对的。答案已调整。另一个选项是使用GetModuleFileName获取加载MY_DLL_N1.DLL的完整路径,将文件名与MY_DLL_N2.DLL交换,并将新的完整路径传递到LoadLibrary。那么你就不必担心搜索路径了。AppPath有什么关系呢?据我所知,它们不会影响DLL搜索。我错了吗?@DavidHeffernan-你是对的。答案已调整。另一个选项是使用GetModuleFileName获取加载MY_DLL_N1.DLL的完整路径,将文件名与MY_DLL_N2.DLL交换,并将新的完整路径传递到LoadLibrary。那么,您根本不必担心搜索路径。