因为我在工作的过程中,使用的是第三方提供的库,但是如何将这些库添加到QT的工程中,是个问题,让我恼火了很久,怎么弄都是错的。

下面,我会对这个问题,进行叙述,希望其他人第一次遇到这种问题的时候,可以轻易的解决。

一.添加第三方的头文件

这个问题再简单不过了,不过我还是要说下。

首先,添加头文件  #include "ControlCAN.h"

然后,再将这个头文件放到工程的目录下,就OK了,非常的简单

二.添加.lib文件

首先,将.lib文件放到对应的工程目录下(当然,放到其他路径也可以)。

但是,仅仅做这一步是不行的,工程不会主动去包含这个.lib文件,你必须告诉他,lib文件在哪里,才可以。

然后,在QT的工程中,你会看到一个.pro文件,比如,我的工程名为test_qt,那么我的文件就是test_qt.pro文件,在整 个QT界面的左上角,.pro文件是管理整个工程的,当要打开一个工程的时候,只要打开.pro,就可以打开整个工 程的所有东西。

所以,我们要做的,就是在.pro文件中,加上一句话,告诉工程,.lib在哪里

LIBS += -LE:/project/QT/usbcan_info/ -lControlCAN

下面对这句话进行解析:

1)+=这个符号是连接在一起的,不要自做聪明,给分开了,写成+ = ,这样就是错的!

2)+=的左右两边可以有空格,也可以没有空格,随意的

3)-L之后紧接着就跟着.lib文件所在的目录,比如,我的目录是在E盘下的project目录下的QT目录下的usbcan_info下,注意,是紧跟着,不要分开,分开就错啦!

4)-l后面跟着的是.lib的文件名,注意,比如你的.lib文件时ControlCAN.lib,不要傻乎乎的写成了-lControlCAN.lib,不要带后缀,要写成-lControlCAN,同样,-l后面也没有空格

完成以上的操作,就可以指定.lib文件了。其实说穿了很简单,就是把.lib随便放到一个目录下,然后告诉工程,你的.lib放到哪里了,叫什么名字。

三.添加.dll文件

一个工程编译成功后,会在工程目录下生成2个目录,一个是debug目录,一个是release目录(注意,如果一个工程刚刚新建,是没有这2二个目录的,不信的朋友可以看看)。

其中,debug就叫做输出目录!因为工程编译后的.exe就在这个目录下。

然后,将.dll文件放到这个目录下。OK了,妥妥的。

下面的内容是我从其它地方复制的

源地址:http://blog.sina.com.cn/s/blog_500bd63c01018b03.html

对于他说的显示调用,我没用得到。

弄过来,以后,我也可以看看~~~

Qt 调用 DLL功能函数是本文要介绍的内容,DLL 是一个包含可由多个程序同时使用的代码和数据的库。不说这么多,先来看内容。
声明: 事先我已经自己动手写了一个简单的DLL文件(myDLL.dll),C版接口的。并且用我前两篇有关DLL文章里面的方法,从DLL中导出了导入库(.lib)文件,dll中有两个函数,原型如下:
1. void HelloWorld(); //函数内部调用Win32 API,功能是弹出一个helloworld提示框
2. int add(int a,int b); //实现两个数相加,并返回结果
下面分别通过显示调用和隐式调用两种方法,来模拟Qt如何调用外部dll文件中的功能函数,follow me....
预备知识:
1、如果在没有导入库文件(.lib),而只有头文件(.h)与动态链接库(.dll)时,我们才需要显示调用,如果这三个文件都全的话,我们就可以使用简单方便的隐式调用。
2、通常Windows下程序显示调用dll的步骤分为三步(三个函数):LoadLibrary()、GetProcAdress()、FreeLibrary()
其中,LoadLibrary() 函数用来载入指定的dll文件,加载到调用程序的内存中(DLL没有自己的内存!)
GetProcAddress() 函数检索指定的动态链接库(DLL)中的输出库函数地址,以备调用
FreeLibrary() 释放dll所占空间
1、显示调用
Qt提供了一个 QLibrary 类供显示调用。下面给出一个完整的例子:
1. #include <QApplication>
2. #include <QLibrary>
3. #include <QDebug>
4. #include <QMessageBox>
5. #include "dll.h" //引入头文件
6. typedef int (*Fun)(int,int); //定义函数指针,以备调用
7. int main(int argc,char **argv)
8. {
9. QApplication app(argc,argv);
10. QLibrary mylib("myDLL.dll"); //声明所用到的dll文件
11. int result;
12. if (mylib.load()) //判断是否正确加载
13. {
14. QMessageBox::information(NULL,"OK","DLL load is OK!");
15. Fun open=(Fun)mylib.resolve("add"); //援引 add() 函数
16. if (open) //是否成功连接上 add() 函数
17. {
18. QMessageBox::information(NULL,"OK","Link to Function is OK!");
19. result=open(5,6); //这里函数指针调用dll中的 add() 函数
20. qDebug()<<result;
21. }
22. else
23. QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!");
24. }
25. else
26. QMessageBox::information(NULL,"NO","DLL is not loaded!");
27. return 0; //加载失败则退出
myDLL.dll为自定义的dll文件,将其复制到程序的输出目录下就可以调用。显然,显示调用代码书写量巨大,实在不方便。
2、隐式调用
这个时候我们需要三个文件,头文件(.h)、导入库文件(.lib)、动态链接库(.dll),具体步骤如下:
1、首先我们把 .h 与 .lib/.a 文件复制到程序当前目录下,然后再把dll文件复制到程序的输出目录,
2、下面我们在pro文件中,添加 .lib 文件的位置: LIBS+= -L D:/hitempt/api/ -l myDLL
-L 参数指定 .lib/.a 文件的位置
-l 参数指定导入库文件名(不要加扩展名)
另外,导入库文件的路径中,反斜杠用的是向右倾斜的
3、在程序中include头文件(我试验用的dll是用C写的,因此要用 extern "C" { #include "dll.h" } )
下面是隐式调用的实例代码:
1. #include <QApplication>
2. #include <QDebug>
3. extern "C" //由于是C版的dll文件,在C++中引入其头文件要加extern "C" {},注意
4. {
5. #include "dll.h"
6. }
7. int main(int argv ,char **argv)
8. {
9. QApplication app(argv,argv);
10. HelloWordl(); //调用Win32 API 弹出helloworld对话框
11. qDebug()<<add(5,6); // dll 中我自己写的一个加法函数
12. return 0; //完成使命后,直接退出,不让它进入事件循环
13. }
还是隐式调用方便啊,直接就可以调用dll中的函数.

转载于:https://www.cnblogs.com/sankye/p/5951852.html

QT总结第3篇:如何在QT中添加.lib,.dll还有.h文件相关推荐

  1. 如何在Eclipse中添加新建包,java文件,工程工具栏按钮

    不多说,直接看图: 完成: MyEclipse也类似.

  2. idea中java文件怎么运行_Java入门基础篇-如何在Java中创建只读文件

    本文选自千锋教育<Java语言程序设计>,如需转载请注明出处,谢谢! 1.如何创建只读文件 要使文件只读,我们只要将文件属性更改为只读就行:可以使用File类的setReadOnly()方 ...

  3. 双系统如何在Centos7中添加GRUB2启动项

    GRUB2是Centos7的默认引导加载程序.它可以轻松地加载所有的Linux发行版和其他操作系统.它提供一个菜单显示所有的操作系统.GRUB2具有高级特性以及一些基本特性,使其在所有Linux上都有 ...

  4. wordpress图像大小_如何在WordPress中添加图像积分(逐步操作)

    wordpress图像大小 Recently, some of our readers asked us about how to properly add image credits in Word ...

  5. wordpress添加媒体_如何在WordPress中添加新帖子并利用所有功能

    wordpress添加媒体 Are you trying to create a new post in WordPress? Do you want to learn about all the W ...

  6. wordpress添加媒体_如何在WordPress中添加精选内容滑块

    wordpress添加媒体 Do you want to add a featured content slider like Yahoo or ESPN? Many popular sites us ...

  7. wordpress模板_如何在WordPress中添加漂亮的电子邮件模板

    wordpress模板 Do you want to change the appearance of emails sent by your WordPress site? By default, ...

  8. 如何在WordPress中添加Google Maps Store Locator

    Do you want to add Google Maps store locator in WordPress? A store locator is a map pointing to your ...

  9. 如何在WordPress中添加抵押贷款计算器(逐步操作)

    Recently one of our readers asked about adding a mortgage calculator in WordPress. 最近,我们的一位读者问有关在Wor ...

  10. trello 删除看板_如何在WordPress中添加类似于Trello的看板

    trello 删除看板 Do you want to add a Trello-like Kanban board to your WordPress website? Keeping track o ...

最新文章

  1. Linux网络编程 之 IO多路复用select(八)
  2. 为了方便大家下载四级资料,开通FTP
  3. 让tomcat运行php
  4. ejb 2.0 3.0_Java EE 6测试第I部分– EJB 3.1可嵌入API
  5. OpenCV相机标定与畸变校正
  6. Android ImageView设置图片原理
  7. 升级华为鸿蒙os2.0名单,鸿蒙OS 2.0正式版升级名单确认!这10款机型用户先恭喜了...
  8. csv逗号分隔符转换_机器学习Python实践——数据导入(CSV)
  9. C#图片处理之: 另存为压缩质量可自己控制的JPEG
  10. Python学习1——语法
  11. 主进程退出后子进程还会存在吗?_进程和线程面试常见的19个问题
  12. titanic数据集_数据可视化泰坦尼克号图表预测
  13. 系统架构师论文-论新技术的引进
  14. 采云端采云链:从订单协同到采购供应链,让采购供应链互联互通
  15. SPI TFT液晶屏与Arduino Uno 连接
  16. 京东VC后台自动批量上传主图 大聪明自动传主图 c# selenium网页自动化传图
  17. rss订阅 android,是的!我用这些软件订阅 RSS
  18. Numpy用法详细总结:学习numpy如何使用,看这一篇文章就足够了
  19. java将map根据key分组_Java将List中的实体类按照某个字段进行分组并存放至Map中操作代码...
  20. ubuntu 16.04安装体验网易云音乐

热门文章

  1. 笔记本一合,显示器就息屏,解决方法
  2. emd断点效应matlab,EMD端点效应抑制方法
  3. 【Android】自定义View、画家(画布)Canvas与画笔Paint的应用——画图、涂鸦板app的实现
  4. 第一章-----Java基础入门(项目名称使用小驼峰命名)
  5. PPT control+D的应用
  6. python中bytearray函数_python函数之bytearray用法详解
  7. 未能加载虚拟光驱到虚拟主机
  8. spring roo_开发Spring Roo附加组件
  9. 1,安装 onlyoffice
  10. 现代c++:MacOS VSCode配置c++17环境