【发布时间】:2013-09-25 05:07:24
【问题描述】:
我需要在我的程序中使用 libcurl.dll(我的程序中依赖 libcurl.dll 的二进制文件是“A.exe”),libcurl.dll 依赖于 zlib1.dll、libeay32.dll、ssleay32.dll。 但是在 A.exe 的文件夹中已经存在另一个版本 libeay32.dll。 所以我打算新建一个“CURL”文件夹,放上我这次介绍的新的4个DLL,然后用动态DLL加载来调用libcurl.dll。
======================
主文件夹 | A.exe, libeay32.dll(旧的), 文件夹“卷曲” ----- | | libcurl.dll、zlib1.dll、libeay32.dll、ssleay32.dll =====================问题是如何控制我的程序在文件夹“CURL”中加载 DLL。 我可以通过调用来控制“A.exe”加载 CURL\libcurl.dll
HMODULE hModule = LoadLibrary(_T("Curl\libcurl.dll")); 但是如何控制zlib1.dll、libeay32.dll、ssleay32.dll的路径。 好像windows默认在A.exe本地的文件夹中搜索DLL。
【问题讨论】:
-
我找到了一个可以在高版本操作系统上运行的解决方案。通过使用加载 DLL: LoadLibraryEx("FullPathofA.exe" , NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_DEFAULT_DIRS);是否有适用于低版本操作系统的方法。 Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008:此值需要安装 KB2533623。 Windows Server 2003 和 Windows XP:不支持此值。
-
我认为这个方案行不通:
libeay32.dll已经加载,因此不会再次加载——即使版本不同! -
@MSalters 但是如果他在加载 libcurl.dll 之前加载正确版本的 libeay32.dll 怎么办?
-
@SamuelVimes:如果它向上兼容,它将起作用。这不是给定的。