Qt——动态库的创建和使用
一、动态库是什么
很多人写程序的人都见过.lib和.dll文件,对动态库也略有耳闻。
生成动态库后可以得到两个文件,后缀名分别是.lib以及.dll。
简而言之,.lib称为导入库,相当于头文件;.dll是动态库文件,相当于cpp,头文件中函数的具体实现。
二、为什么使用动态库
使用动态库的优点很多,可以减少可执行文件的大小、实现资源共享、便于维护。比如在MFC中调用Qt。
关于动态库与静态库的更多详细介绍,可以参开这篇文章——c++静态库与动态库
三、如何生成动态库
1.一个简单qt界面
我们的目标是创建这个界面的动态库,然后在其它程序中引入动态库,把该界面显示出来。
程序结构如下:
其中包括头文件、实现文件,以及界面ui文件,程序的主界面类DllTestWidget。
2.创建工程,准备动态库导出
a.创建完工程之后,设置工程属性。
b.链接器-常规-输出文件,设置动态库文件.dll生成路径。
c.链接器-高级-导入库,设置导入库文件.lib生成路径。
上面这些只是设置生成路径,如果不修改的话,一般生成在默认路径win32文件夹下。
3.编写程序,生成动态库
#ifdef TESTWIDGET_LIB
# define TESTWIDGET_EXPORT __declspec(dllexport)
#else
# define TESTWIDGET_EXPORT __declspec(dllimport)
#endif
如果生成的动态库,以后仍然供Qt使用,则直接加上上面的代码,导出该类即可;
如果不希望包含ui文件,则将其放入.cpp文件中即可;
如果生成的动态库以后在非Qt的环境下使用,则需要新建一个纯虚类,让Qt类继承它,实现其共有的虚函数即可。
四、如何使用动态库
1.配置属性-调试-环境 加入生成.dll动态库目录路径。
2.C/C++-常规-附加包含目录 加入所需头文件.h路径。
3.链接器-常规-附加库目录 增加生成的导入库.lib的路径。
4.链接器-输入-附加依赖库 最后加入生成的导入库.lib文件。
按照上面的设置,我们便可以在其它地方使用之前生成的动态库啦。
Qt——动态库的创建和使用的更多相关文章
- Linux Qt动态库的创建和使用
一.创建动态库 编写一个共享库类,比如: //..base.h class Base : public QObject { Q_OBJECT public: ); void PrintLog(QStr ...
- qt动态库实现无边框窗体的消息处理 nativeEvent的使用
需求: 在动态库中创建一个窗口句柄,可以给外部调用,库的调用者,通过这个句柄发送消息到底层库,库里面可以实现对消息的处理 m_FHandle=AllocateHWnd(WndProcDllMsg); ...
- Windows下静态库与动态库的创建与使用
Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...
- Windows下静态库、动态库的创建和调用过程
静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...
- DLL动态库的创建,隐式加载和显式加载
动态库的创建 打开VS,创建如下控制台工程,工程命名为DllTest: 在弹出的对话框中选择"DLL"后单击"完成"按钮: 在工程中新建DllTest.h和Dl ...
- Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...
- Makefile中静态库,动态库的创建和使用以及解压缩命令
应用层通过操作文件操控硬件 使用制作好的工具链: 刚开始学习时,用一些已经制作好的工具链,使用以下命令解压到gcc-3.4.5-glibc-2.3.6目录 cd /work/tools tar xjf ...
- QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)
背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...
- Windows静态库和动态库的创建和使用
偶们在实际的编程开发中,经常会遇到运行时无法找到某个DLL文件或者链接时无法找到某个LIB文件.然后,我们就开始乱GOOGLE一下,然后将VS2005的设置改变一下,或许就Ok了,我们将别人开发的DL ...
随机推荐
- GetEnumerator();yield
GetEnumerator()方法的实质实现: 说明:只要一个集合点出GetEnumerator方法,就获得了迭代器属性,就可以用MoveNext和Current来实现foreach的效果,如上图. ...
- MySQL学习笔记 -- 数据表的基本操作
数据库是一个可以存放数据库对象的容器,数据库对象包括:表.视图.存储过程.函数.触发器.事件.其中,表是数据库最基本的元素,是其他数据库对象的前提条件. 表中的一列称为一个字段,一行称为一条记录. 1 ...
- H5与CS3权威上.5 绘制图形(1)
1.canvas元素基础知识 (1)在页面上放置canvas元素,相当于在页面上放置一块"画布",可以用Javascript编写在其中进行绘画的脚本. (2)在页面中放置canva ...
- git 提交解决冲突
一:git命令在提交代码前,没有pull拉最新的代码,因此再次提交出现了冲突. error: You have not concluded your merge (MERGE_HEAD exists) ...
- hibernate(3) —— 关系映射
hibernate中关系映射指的是实体类与实体类间的关系.和数据库中表与表之间的关系类似,有一对一,多对一,一对多,多对多四种映射关系. 一:一对一映射 两个对象之间是一对一的关系,如人和身份证之间是 ...
- NetSuite Chinese Finance Reports
NetSuite has a strong report customization application. The standard finance reports has a different ...
- iOS 9 强制横屏
首先在plist 文件中 Supported interface orientations 选项 只留下一个 portrait 屏幕强制横屏 使用以下代码 self.navigationControl ...
- IOS开发基础知识--碎片43
1:增加手势进行左划效果,针对视图并修改其中一个的坐标,菜单用隐藏跟显示 @property(strong,nonatomic)UISwipeGestureRecognizer *recognizer ...
- Android自定义ViewGroup,实现自动换行
学习<Android开发艺术探索>中自定义ViewGroup章节 自定义ViewGroup总结的知识点 一.自定义ViewGroup中,onMeasure理解 onMeasure(int ...
- SQL SERVER作业的Schedules浅析
SQL SERVER作业的计划(Schedules),如果你没仔细研究过或没有应用一些复杂的计划(Schedules),那么你觉得SQL SERVER作业的计划(Schedules)非常好用,也没啥问 ...