我有一个自己的dll,它使用第三方dll,通过它的lib文件包含。 如果第三方dll在工作目录中,编译工作正常,运行时也可以工作。
但是现在我想将第三方dll移动到另一个文件夹然后我的dll无法加载,因为第三方dll无法加载,因为它无法找到。
在哪里(VS2010)或如何定义在运行期间应该使用的第三方DLL的文件夹?
答案 0 :(得分:1)
将包含DLL的文件夹添加到PATH
环境变量。
答案 1 :(得分:1)
首先,我们应区分两种情况:
1)Load-Time Dynamic Linking - 当您将代码链接到存根库以在链接时解析对DLL函数的引用,然后系统尝试在程序启动时加载DLL(并终止程序,如果没有找到DLL),你基本上没有控制。从您所说的内容来看,您正在使用此选项。
2)Run-Time Dynamic Linking - 当您通过LoadLibrary
/ LoadLibraryEx
自己加载DLL并在运行时解析所需的符号。在这里,您可以更好地控制正在发生的事情(在其他方面,您可以指定什么以及从何处加载)。如果您需要自定义布局,可能需要切换到这种机制吗?
因此,两种情况都需要发生什么:
1)系统基本上在一组预定义的搜索路径中搜索您要加载的DLL及其可能依赖的任何DLL。所以,正如m.s.所提到的那样。您可以将包含DLL的路径附加到PATH
变量,然后系统将能够找到它。但这只是系统查找DLL的地方之一。Here是一个完整的描述。简而言之,搜索顺序中最重要的地方是:
因此,这解释了为什么添加PATH
有效并且也被认为是一种常规方法,因为使用当前目录进行调整(您可以这样做)可以做坏事。
2)在这种情况下,你是独立的。 LoadLibraryEx可以使用SetDefaultDllDirectories或LOAD_WITH_ALTERED_SEARCH_PATH
加载DLL和任何依赖项来更改搜索路径。