我需要在我的程序中使用libcurl.dll(二进制文件依赖于我的程序中的libcurl.dll是" A.exe"),libcurl.dll依赖于zlib1.dll,libeay32.dll ,ssleay32.dll。 但还有另一个版本libeay32.dll已经存在于A.exe的文件夹中。 所以我打算创建一个文件夹" CURL"这次我介绍了新的4 DLL,然后使用动态DLL加载来调用libcurl.dll。
=====================
Main folder | A.exe, libeay32.dll(old one), Folder "CURL" ----- | | libcurl.dll, zlib1.dll, libeay32.dll, ssleay32.dll =====================
问题是如何控制我的程序加载文件夹中的DLL" CURL"。 我可以控制" A.exe"通过调用
加载CURL \ libcurl.dllHMODULE hModule = LoadLibrary(_T(" Curl \ libcurl.dll")); 但是如何控制zlib1.dll,libeay32.dll,ssleay32.dll的路径。 似乎windows在默认的A.exe local文件夹中搜索DLL。
答案 0 :(得分:0)
使用编译器的include directorys设置。或/并利用windows逻辑来查找依赖的dll。 (您可以使用工具作为filemon或process monitor来查看正在查找的目录)
使用Windows的搜索路径。订单是:
当前进程的可执行模块所在的目录。
当前目录。
Windows系统目录。 GetSystemDirectory函数检索此目录的路径。
Windows目录。 GetWindowsDirectory函数检索此目录的路径。
PATH环境变量中列出的目录。
答案 1 :(得分:0)
如果指定了dll的完整路径而不是呼叫中的相对路径,则应该可以使用LoadLibrary
加载它。当仅使用文件名或相对路径时,搜索顺序与lordKain一样(除非您修改它,例如通过调用SetDllDirectory
),但是当使用完整路径时,它应该只搜索指定的位置。您可以首先以这种方式加载您需要的libeay32.dll版本,这样当您加载libcurl.dll时,您所需的libeay32.dll版本已经加载。还要注意没有dll重定向清单。