我了解我需要使用LoadLibrary()。但是,要使用第三方DLL文件,我还需要采取什么其他步骤?
我只是跳入C ++,这是我唯一不了解的部分(作为Java程序员)。我只是在研究如何使用Qt库和tesseract-ocr,但是该过程对我来说毫无意义,并且很难谷歌搜索。
如何告诉编译器我正在使用的功能?是否应该有第三方供应商提供的包含文件?
Answers:
就像其他人所说的那样,LoadLibrary是很难做到的方法,而且几乎没有必要。
该DLL应该随附有一个.lib文件用于链接,以及一个或多个头文件以将#include插入您的源代码。头文件将定义可从DLL使用的类和函数原型。即使您使用LoadLibrary,也将需要它。
要与库链接,您可能必须将.lib文件添加到Linker / Input / Additional Dependencies下的项目配置中。
要将第三方DLL合并到我的VS 2008 C ++项目中,我执行了以下操作(您应该能够转换为2010、2012等)...
我将头文件与其他头文件放在解决方案中,对代码进行了更改以调用DLL的函数(否则我们为什么要做所有这一切?)。:^)然后,我更改了构建,以将LIB代码链接到我的EXE中,将DLL复制到适当的位置,并在执行“清理”操作时将其清理-我在下面解释了这些更改。
假设您有2个第三方DLL A.DLL和B.DLL,并且每个都有一个存根LIB文件(A.LIB和B.LIB)和头文件(AH和BH)。
(您必须对使用的每个源构建目标(调试,发布)进行一次下一组更改。)
使您的EXE依赖于LIB文件
A.LIB B.LIB
$(SolutionDir)fodder
那里,则将其更改$(SolutionDir)fodder;$(SolutionDir)lib
为添加“ lib”。强制将DLL复制到输出目录
XCOPY "$(SolutionDir)"\lib\*.DLL "$(TargetDir)" /D /K /Y
Copy DLLs to Target Directory
No
。点击OK
。告诉VS清理输出文件夹时清理DLL:
*.dll
到列表的末尾并单击OK
。Additional Library Directories
在Configuration Properties -> General
标签。请帮我。
Configuration Properties -> Linker -> General -> Additional Library Directories
。
XCOPY "$(SolutionDir)\lib\*.DLL" "$(TargetDir)" /D /K /Y
XCOPY
从工作配置中复制/粘贴了命令。您是在说报价因为对您不起作用而被放错了位置,还是只是猜测?
这是在Windows中使用DLL文件的两种方式:
有一个存根库(.lib)及其相关的头文件。当您将可执行文件与lib文件链接时,它将在启动程序时自动加载DLL文件。
手动加载DLL。如果要开发的插件系统中有许多实现公共接口的DLL文件,通常这就是您要执行的操作。有关更多信息,请查阅LoadLibrary和GetProcAddress的文档。
对于Qt,我怀疑可能有标头和静态库,您可以在项目中包括并链接这些库。
dll
和lib
文件。它不是在创建includes
目录。我如何在项目中包含头文件?