Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ windows C++;动态加载_C++_Curl_Dll - Fatal编程技术网

C++ windows C++;动态加载

C++ windows C++;动态加载,c++,curl,dll,C++,Curl,Dll,我需要在程序中使用libcurl.dll(程序中依赖libcurl.dll的二进制文件是“A.exe”),libcurl.dll依赖于zlib1.dll、libeay32.dll、ssleay32.dll。 但另一个版本libeay32.dll已经存在于A.exe的文件夹中。 因此,我计划创建一个文件夹“CURL”,放置我这次引入的新的4DLL,然后使用动态DLL加载来调用libcurl.DLL ===================== Main folder | A.exe, lib

我需要在程序中使用libcurl.dll(程序中依赖libcurl.dll的二进制文件是“A.exe”),libcurl.dll依赖于zlib1.dll、libeay32.dll、ssleay32.dll。 但另一个版本libeay32.dll已经存在于A.exe的文件夹中。 因此,我计划创建一个文件夹“CURL”,放置我这次引入的新的4DLL,然后使用动态DLL加载来调用libcurl.DLL

=====================

Main folder | A.exe, libeay32.dll(old one), Folder "CURL" ----- | | libcurl.dll, zlib1.dll, libeay32.dll, ssleay32.dll ===================== 主文件夹 | A.exe, libeay32.dll(旧的), 文件夹“CURL”----- | | 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。

使用编译器的include Directory设置。或/和使用windows逻辑查找依赖dll。(您可以将工具用作filemon或查看正在查找的目录)

使用windows的搜索路径。订单为:

  • 当前进程的可执行模块所在的目录

  • 当前目录

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

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

  • PATH环境变量中列出的目录


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

    我想你误解了我的问题,我知道windows搜索DLL的顺序。我想将我的文件夹“CURL”添加到搜索列表中,并使其成为windows搜索DLL的第一个文件夹。我找到了一个可以在高版本操作系统上工作的解决方案。使用以下命令加载DLL:LoadLibraryEx(“fullpathfa.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:如果它向上兼容,它就会工作。这不是一个既定的目标。