如何在Visual Studio C++中使用第三方DLL文件?

Zom*_*ies 69 c++ dll winapi visual-studio

我知道我需要使用LoadLibrary().但是,为了使用第三方DLL文件,我需要采取哪些其他步骤?

我只是跳进了C++,这是我唯一没有得到的部分(作为Java程序员).我只是在研究如何使用Qt库和tesseract-ocr,但这个过程对我来说没有任何意义,谷歌也很难.

如何告诉编译器我正在使用的函数?是否应该有来自第三方供应商的包含文件?

Mar*_*som 66

正如其他人所说,LoadLibrary是很难做到的,几乎没有必要.

DLL应该带有一个用于链接的.lib文件,以及一个或多个头文件到#include到你的源代码中.头文件将定义可以从DLL中使用的类和函数原型.即使您使用LoadLibrary,也需要这样做.

要链接库,您可能必须将.lib文件添加到链接器/输入/附加依赖项下的项目配置中.

  • @advocate,“常规”选项卡上有一个“其他图书馆目录”条目。我不知道微软为什么将它们分开。 (2认同)

ric*_*h p 62

要将第三方DLL合并到我的VS 2008 C++项目中,我执行了以下操作(您应该能够翻译成2010年,2012年等)...

我用我的其他头文件把头文件放在我的解决方案中,对我的代码进行了更改以调用DLL的函数(否则我们为什么要这样做呢?).:^)然后我更改了构建以将LIB代码链接到我的EXE,将DLL复制到位,并在我做"干净"时清理它们 - 我在下面解释这些更改.

假设您有2个第三方DLL,A.DLL和B.DLL,并且每个(A.LIB和B.LIB)和头文件(AH和BH)都有一个存根LIB文件.

  • 在解决方案目录下创建一个"lib"目录,例如使用Windows资源管理器.
  • 将第三方.LIB和.DLL文件复制到此目录中

(对于您使用的每个源构建目标(Debug,Release),您必须为下一组更改进行一次.)

  1. 使您的EXE依赖于LIB文件

    • 转到配置属性 - >链接器 - >输入 - >附加依赖项,并一次列出一个.LIB文件,用空格分隔: A.LIB B.LIB
    • 转到配置属性 - >常规 - >其他库目录,并将"lib"目录添加到您已经拥有的任何目录中.条目以分号分隔.例如,如果您已经在$(SolutionDir)fodder那里,则将其更改$(SolutionDir)fodder;$(SolutionDir)lib为添加"lib".
  2. 强制DLL被复制到输出目录

    • 转到配置属性 - >构建事件 - >构建后事件
    • 将以下命令放入命令行(对于开关含义,请参见DOS窗口中的"XCOPY /?"):

    XCOPY "$(SolutionDir)"\lib\*.DLL "$(TargetDir)" /D /K /Y

    • 你可以把这样的东西放到描述中:

    Copy DLLs to Target Directory

    • 从Build中排除应该是No.点击OK.
  3. 在清理输出文件夹时告诉VS清理DLL:

    • 转到配置属性 - >常规 - >要清除时删除的扩展,然后单击"..."; 添加*.dll到列表的末尾并单击OK.

  • 那应该是`Configuration Properties - > Linker - > General - > Additional Library Directories`. (4认同)
  • 我正在尝试使用您的方法来使用第三方dll.我正在使用Visual Studio 2012 ultimate,它在`Configuration Properties - > General`选项卡中没有`Additional Library Directories`.请帮我. (2认同)

Las*_*lan 24

这些是在Windows中使用DLL文件的两种方法:

  1. 存在具有关联头文件的存根库(.lib).当您将可执行文件与lib文件链接时,它将在启动程序时自动加载DLL文件.

  2. 手动加载DLL.如果您正在开发一个插件系统,其中有许多DLL文件实现了一个通用接口,这通常是您想要做的.有关此内容的详细信息,请查看LoadLibraryGetProcAddress的文档.

对于Qt,我怀疑有可用的标题和静态库,您可以在项目中包含和链接.

  • 这仅适用于标准库.对于自定义库(第三方),您无法静态链接dll,除非有人明确构建了可以链接的静态版本. (2认同)

drb*_*rby 6

为了使用Qt动态链接时,你必须指定lib文件(通常qtmaind.lib,QtCored4.libQtGuid4.lib为"调试" CONFIGRATION)的
Properties » Linker » Input » Additional Dependencies.

您还必须指定库所在的路径,即
Properties » Linker » General » Additional Library Directories.

并且您需要.dll在运行时访问相应的s,方法是将它们存储在与您.exe路径中的文件夹相同的文件夹中.