QTCreator调用动态库实例讲述Word下载.docx

上传人:b****1 文档编号:3446554 上传时间:2023-05-01 格式:DOCX 页数:15 大小:465.84KB
下载 相关 举报
QTCreator调用动态库实例讲述Word下载.docx_第1页
第1页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第2页
第2页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第3页
第3页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第4页
第4页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第5页
第5页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第6页
第6页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第7页
第7页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第8页
第8页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第9页
第9页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第10页
第10页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第11页
第11页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第12页
第12页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第13页
第13页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第14页
第14页 / 共15页
QTCreator调用动态库实例讲述Word下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

QTCreator调用动态库实例讲述Word下载.docx

《QTCreator调用动态库实例讲述Word下载.docx》由会员分享,可在线阅读,更多相关《QTCreator调用动态库实例讲述Word下载.docx(15页珍藏版)》请在冰点文库上搜索。

QTCreator调用动态库实例讲述Word下载.docx

intadd(inti,intj);

};

extern"

C"

MY_EXPORTintdiff(inti,intj);

#endif//MYLIB_H

mylib.cpp文件程序清单:

#include"

mylib.h"

MY_EXPORTintmylib:

:

mymax(inti,intj)

{

if(i>

=j)

returni;

else

returnj;

}

add(inti,intj)

returni+j;

MY_EXPORTintdiff(inti,intj)

returni-j;

returnj-i;

对该工程进行编译,生成libzsz.so文件。

2、创建一个GUI工程,并把zsz工程下的mylib.h和libzsz.so两个文件拷贝到当前目录下。

工程文件程序清单:

15:

03

TARGET=

TEMPLATE=app

QT+=svg

LIBS+=./libzsz.so

SOURCES+=main.cpp

main.cpp中的程序为:

#include<

qapplication.h>

QPushButton>

QLibrary>

QtDebug>

intmain(intargc,char*argv[])

QApplicationapp(argc,argv);

QPushButtonhello("

Helloworld!

zwd"

);

hello.resize(400,200);

myliba;

qDebug()<

<

"

Inthetwonumbers9and15,maxxeris"

a.mymax(15,9);

Addthetwonumbers9and15,resultis"

a.add(15,9);

Diffthetwonumbers9and15,resultis"

diff(15,9);

hello.show();

returnapp.exec();

Qt创建和使用动态链接库

原文出处:

 

与VC环境下的普通DLL导出导入类似。

动态库 

在 

qtcreator 

的 

.pro文件中 

使用 

__declspec(dllexport) 

申明要导出的函数或类 

是否要加上extern"

看具体情形。

使用方用导入申明 

__declspec(dllimport)

静态库 

TEMPLATE=lib 

一、创建共享库

1、新其他建项目,选择C++库

2、选择共享库,并取项目名称,单击下一步。

这里取名位mylib

3、按默认配置单击下一步至模块选项,选择所需支持的模块。

这里勾选Qtcore和QtGui。

4、直接下一步至完成。

现在一个共享库的工程就新建好了。

5、右击项目添加新文件,选择Qt设计师界面,以便支持可视化界面设计。

6、进入可视化界面设计,修改objectName为Mylib

7、修改mylib.h文件,代码如下:

[cpp] 

viewplaincopy

1.#ifndef 

MYLIB_H 

2.#define 

3.#include 

mylib_global.h"

4.#include 

QDialog>

5.namespace 

Ui 

6.{ 

7. 

class 

Mylib;

8.} 

9.class 

MYLIBSHARED_EXPORT 

Mylib 

public 

QDialog 

10.{ 

11.public:

12. 

Mylib(QWidget 

*parent 

0);

13.private:

14. 

Ui:

*ui;

15.};

16.#endif 

// 

8、修改mylib.cpp文件,代码如下:

1.#include 

2.#include 

ui_mylib.h"

3.Mylib:

*parent):

4. 

QDialog(parent), 

5. 

ui(new 

Mylib) 

ui->

setupUi(this);

9、右键单击项目,选择构建项目"

mylib"

如果没有错误,构建成功后会在Debug文件夹下出现这三个文件。

mylib.dll即为后面要使用到的共享库,libmylib.a是Linux下使用的库。

至此,已生成了要使用的共享库。

二、共享库的使用

现在需要新建一个工程来调用我们刚才生成的共享库。

这里我创建了一个名为libtest的Dialog工程。

1、修改工程文件libtest.pro,在文件尾添加如下代码:

1.INCLUDEPATH 

+= 

../ 

2.LIBS 

../debug/lib.dll 

INCLUDEPATH 

这一行就是为了让我们的 

libtest 

项目可以找到 

mylib.h 

和 

mylib_global.h 

这两个文件,你需要把这里的路径替换成符合你的工程的路径。

LIBS 

这一行则需要告诉编译器(注意,这里是编译器!

)到哪里去找到这个 

dll 

文件。

这里,我的路径为:

I:

\Qt\MyProjects\mylib 

\Qt\MyProjects\mylib\debug\mylib.dll 

2、在dialog中添加一个button,单击button时调用共享库。

修改dialog.cpp文件,代码如下:

dialog.h"

ui_dialog.h"

4.Dialog:

Dialog(QWidget 

*parent) 

6. 

Dialog) 

7.{ 

8. 

9.} 

10.Dialog:

~Dialog() 

11.{ 

delete 

ui;

13.} 

14.void 

Dialog:

on_pushButton_clicked() 

15.{ 

16. 

w;

17. 

w.show();

18. 

w.exec();

19.} 

3、此时运行一下,会是什么效果呢?

什么都没有!

提示

1.I:

\Qt\MyProjects\libtest\debug\libtest.exe 

启动中... 

2.I:

退出, 

代码:

-1073741515 

找到libtest工程目录下的libtest.exe,双击运行,弹出

没有找到mylib.dll?

不是使用 

指定了吗?

请注意,我们强调了,这个指定是编译期的。

是动态链接库,也就是说,在 

exe 

运行的时候需要找到这个库。

运行时查找的顺序是:

当前路径 

->

系统路径(通常是 

system32)。

所以,要把我们先前生成的这个 

mylib.dll 

复制到 

所在目录,然后直接双击一下这个 

程序运行如下

单击Mylib 

test按钮,共享库mylib的dialog也弹出来啦~~~

到这里,共享库的使用也成功了。

三、更新dll

也许有人要问了,共享库的创建和使用都这么麻烦,用它有什么好处呢。

共享库的一个好处是可以动态加载,也就是说,如果你需要升级程序,那么就要简单的替换掉这个 

就好了,不需要要求用户重新安装全部文件。

当然,这些 

也是有缺点的:

动态加载的东西肯定会比静态编译的东西效率低一些。

不过在现在的硬件环境下,这点性能损失已经可以忽略不计了。

好,那么我们现在来体验一下如何更新dll来达到升级程序的目的。

1、修改mylib.cpp,在共享库的dialog中添加一个button。

2、右键单击项目mylib,选择重新构建项目"

3、将libtest项目目录下的mylib.dll替换新的mylib.dll。

4、运行libtest.exe

这时单击Mylib 

test按钮,效果如何呢?

至此,我们在没有修改程序的情况下,通过替换dll达到了改变程序运行效果的目的。

也就是说我们可以通过更新dll文件来完成对程序的升级了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2