我知道我需要使用LoadLibrary(),但是为了使用第三方DLL文件,我还需要采取哪些步骤呢?
我直接跳入C++,这是唯一的部分我不太明白(作为一名Java程序员)。我正在探索如何使用Qt库和tesseract-ocr,然而这个过程对我来说毫无意义,而且很难通过谷歌了解。
我该如何告诉编译器我正在使用的函数?是否应该有来自第三方供应商的include文件?
我知道我需要使用LoadLibrary(),但是为了使用第三方DLL文件,我还需要采取哪些步骤呢?
我直接跳入C++,这是唯一的部分我不太明白(作为一名Java程序员)。我正在探索如何使用Qt库和tesseract-ocr,然而这个过程对我来说毫无意义,而且很难通过谷歌了解。
我该如何告诉编译器我正在使用的函数?是否应该有来自第三方供应商的include文件?
众所周知,使用LoadLibrary方法是一种很困难的方式,几乎从不必要。
这个DLL应该带有一个用于链接的.lib文件,以及一个或多个需要#include到你的代码中的头文件。这些头文件将定义你可以从DLL中使用的类和函数原型。即使你使用LoadLibrary,你也需要这些东西。
要链接库,你可能需要将.lib文件添加到项目配置中的链接器/输入/附加依赖项下。
$(SolutionDir)fodder
,则将其更改为$(SolutionDir)fodder;$(SolutionDir)lib
以添加"lib"。将DLL复制到目标目录
No
。
单击确定
。告诉VS在清理输出文件夹时清理DLL:
*.dll
添加到列表的末尾,然后单击确定
。配置属性 -> 链接器 -> 常规 -> 附加库目录
。 - Colin RobertsonXCOPY "$(SolutionDir)\lib\*.DLL" "$(TargetDir)" /D /K /Y
。 - Tristan CHARBONNIERXCOPY
命令。你是说引号错放位置导致它对你不起作用,还是只是猜测? - rich p使用带有相关头文件的存根库(.lib)。当您将可执行文件与此lib文件链接时,程序启动时会自动加载DLL文件。
手动加载DLL文件。这通常是您在开发插件系统时想要做的事情,其中有许多DLL文件实现共同的接口。有关此更多信息,请查看LoadLibrary和GetProcAddress的文档。
dll
和lib
文件,并未创建一个includes
目录。我该如何将我的头文件包含进项目中呢? - mrid属性» 链接器» 输入» 附加依赖项
。属性» 链接器» 常规» 附加库目录
。如果你想在运行时动态地绑定并解析导入的函数,那么只需要使用LoadLibrary。使用第三方dll最简单的方法是链接一个.lib文件。
回答你的编辑:
是的,第三方API应该包含一个包含实现和声明所需类型的dll和/或lib文件。无论你使用哪种方法,你都需要了解类型定义。对于LoadLibrary,你需要定义函数指针,因此你也可以编写自己的头文件。基本上,只有当你想要延迟绑定时才需要使用LoadLibrary。这样做的一个有效原因是,你不确定目标PC上是否有该dll。