windows C ++ DLL动态加载

时间:2013-09-25 05:07:24

标签: c++ curl dll

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

HMODULE hModule = LoadLibrary(_T(" Curl \ libcurl.dll")); 但是如何控制zlib1.dll,libeay32.dll,ssleay32.dll的路径。 似乎windows在默认的A.exe local文件夹中搜索DLL。

2 个答案:

答案 0 :(得分:0)

使用编译器的include directorys设置。或/并利用windows逻辑来查找依赖的dll。 (您可以使用工具作为filemon或process monitor来查看正在查找的目录)

使用Windows的搜索路径。订单是:

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

  2. 当前目录。

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

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

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

答案 1 :(得分:0)

如果指定了dll的完整路径而不是呼叫中的相对路径,则应该可以使用LoadLibrary加载它。当仅使用文件名或相对路径时,搜索顺序与lordKain一样(除非您修改它,例如通过调用SetDllDirectory),但是当使用完整路径时,它应该只搜索指定的位置。您可以首先以这种方式加载您需要的libeay32.dll版本,这样当您加载libcurl.dll时,您所需的libeay32.dll版本已经加载。还要注意没有dll重定向清单。