0

我需要在我的程序中使用 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。

4

2 回答 2

0

LoadLibrary如果您在调用中指定 dll 的完整路径而不是相对路径,则应该能够加载它。仅使用文件名或相对路径时,搜索顺序如 lordKain 所说(除非您修改它,例如通过调用SetDllDirectory),但使用完整路径时,它应该只在指定的位置进行搜索。这样你就可以先加载你需要的libeay32.dll版本,这样在你加载libcurl.dll的时候,你想要的libeay32.dll版本就已经加载好了。还要注意没有 dll 重定向清单。

于 2013-09-25T07:48:36.693 回答
0

使用编译器的包含目录设置。或 / 并利用 windows 逻辑来查找依赖的 dll。(您可以使用工具作为文件监视器或进程监视器来查看正在查找的目录)

使用windows的搜索路径。顺序是:

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

  2. 当前目录。

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

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

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

于 2013-09-25T05:21:17.350 回答