我知道我需要使用LoadLibrary().但是,为了使用第三方DLL文件,我需要采取哪些其他步骤?
我只是跳进了C++,这是我唯一没有得到的部分(作为Java程序员).我只是在研究如何使用Qt库和tesseract-ocr,但这个过程对我来说没有任何意义,谷歌也很难.
如何告诉编译器我正在使用的函数?是否应该有来自第三方供应商的包含文件?
正如其他人所说,LoadLibrary是很难做到的,几乎没有必要.
DLL应该带有一个用于链接的.lib文件,以及一个或多个头文件到#include到你的源代码中.头文件将定义可以从DLL中使用的类和函数原型.即使您使用LoadLibrary,也需要这样做.
要链接库,您可能必须将.lib文件添加到链接器/输入/附加依赖项下的项目配置中.
要将第三方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),您必须为下一组更改进行一次.)
使您的EXE依赖于LIB文件
转到配置属性 - >链接器 - >输入 - >附加依赖项,并一次列出一个.LIB文件,用空格分隔: A.LIB B.LIB
转到配置属性 - >常规 - >其他库目录,并将"lib"目录添加到您已经拥有的任何目录中.条目以分号分隔.例如,如果您已经在$(SolutionDir)fodder
那里,则将其更改$(SolutionDir)fodder;$(SolutionDir)lib
为添加"lib".
强制DLL被复制到输出目录
转到配置属性 - >构建事件 - >构建后事件
将以下命令放入命令行(对于开关含义,请参见DOS窗口中的"XCOPY /?"):
XCOPY "$(SolutionDir)"\lib\*.DLL "$(TargetDir)" /D /K /Y
你可以把这样的东西放到描述中:
Copy DLLs to Target Directory
从Build中排除应该是No
.点击OK
.
在清理输出文件夹时告诉VS清理DLL:
转到配置属性 - >常规 - >要清除时删除的扩展,然后单击"..."; 添加*.dll
到列表的末尾并单击OK
.
这些是在Windows中使用DLL文件的两种方法:
存在具有关联头文件的存根库(.lib).当您将可执行文件与lib文件链接时,它将在启动程序时自动加载DLL文件.
手动加载DLL.如果您正在开发一个插件系统,其中有许多DLL文件实现了一个通用接口,这通常是您想要做的.有关此内容的详细信息,请查看LoadLibrary和GetProcAddress的文档.
对于Qt,我怀疑有可用的标题和静态库,您可以在项目中包含和链接.
为了使用Qt动态链接时,你必须指定lib
文件(通常qtmaind.lib
,QtCored4.lib
并QtGuid4.lib
为"调试" CONFIGRATION)的
Properties » Linker » Input » Additional Dependencies
.
您还必须指定库所在的路径,即
Properties » Linker » General » Additional Library Directories
.
并且您需要.dll
在运行时访问相应的s,方法是将它们存储在与您.exe
或路径中的文件夹相同的文件夹中.