C++ C++;链接不同目录中的第三方dll
我有一个自己的dll,它使用第三方dll,包括通过其lib文件。 如果第三方dll位于工作目录中,编译工作正常,运行时工作正常 但是现在我想将第三方dll移动到另一个文件夹中,然后我的dll无法加载,因为第三方dll无法加载,因为找不到它C++ C++;链接不同目录中的第三方dll,c++,visual-studio-2010,dll,C++,Visual Studio 2010,Dll,我有一个自己的dll,它使用第三方dll,包括通过其lib文件。 如果第三方dll位于工作目录中,编译工作正常,运行时工作正常 但是现在我想将第三方dll移动到另一个文件夹中,然后我的dll无法加载,因为第三方dll无法加载,因为找不到它 在何处(VS2010)或如何定义运行时应使用的第三方dll的文件夹?将包含dll的文件夹添加到路径环境变量。首先,我们应该区分两种情况: 1) -当您将代码链接到存根库,以在链接时解析对DLL函数的引用,然后当程序启动时系统尝试加载DLL(如果找不到DLL,则
在何处(VS2010)或如何定义运行时应使用的第三方dll的文件夹?将包含dll的文件夹添加到
路径
环境变量。首先,我们应该区分两种情况:
1) -当您将代码链接到存根库,以在链接时解析对DLL函数的引用,然后当程序启动时系统尝试加载DLL(如果找不到DLL,则终止程序),而您基本上无法控制。从你所说的判断,你正在使用这个选项
2) -当您自己通过LoadLibrary
/LoadLibraryEx
加载DLL并在运行时解析所需的符号时。在这里,您可以更好地控制正在发生的事情(在其他事情中,您可以指定加载内容和从何处加载)。如果您需要自定义布局,那么切换到此机制可能有意义
那么,要使这两种方案都起作用,需要做些什么:
1) 系统基本上会在一组预定义的搜索路径中搜索您试图加载的DLL以及它可能依赖的任何DLL。因此,正如m.s.所述,您可以将包含DLL的路径附加到path
变量,然后系统将能够找到它。但这只是系统查找DLL的地方之一。这是一个完整的描述。简言之,按搜索顺序排列的最重要位置是:
- 从中加载应用程序的目录
- 系统目录
- Windows目录
- 当前目录
- PATH环境变量中列出的目录
PATH
会起作用,也被认为是一种正常的方法,因为调整当前目录(您可以这样做)可能会产生不良影响
2) 在这种情况下,您只能靠自己。通过使用或
LOAD\u WITH\u alterned\u search\u path
在运行时加载DLL和任何依赖项,可以更改搜索路径。?怎么做?为什么在运行时要这样做?只需在启动程序之前执行此操作,因为它不仅在我的机器上运行,而且在客户的机器上运行。所以我可以在安装过程中这样做?@GernotLepej是的,你应该在安装过程中这样做。详细信息取决于您使用的安装机制。是否可以通过dll的lib文件使用dll并执行运行时动态链接?@GernotLepej-您不需要lib
文件。您要做的是将LoadLibraryEx
与dll文件名一起使用,然后调用GetProcAddress
以获取指向所需函数的指针,并以与使用lib
文件时调用函数相同的方式调用这些指针。MSDN在这里有一个很好的例子-