大宇私人领地伊甸园丨宁愿做了后悔,也不要错过后悔[www.mrdayu.com]
注册

24小时联系邮箱:[email protected]

所有文章
大宇私人伊甸园: 首页 > 所有文章 > 编程人生 > 系统架构 > QT > 《大宇:Qt入门到精通》 > [101.01]QT创建dll及使用

[101.01]QT创建dll及使用

发布时间:2018/04/11 《大宇:Qt入门到精通》 所有文章 阅读:216

前言:

很长时间没有更新了,遇到了一些事情,也遇到了人生的多重转折,可我不会被打倒,他们也不希望我一蹶不振,带着思念他们的包袱,我会坚持将所有教程写完,不求流芳千古,但求能为这个社会进步贡献一丝微薄之力,也希望世界上在世的所有父母身体健康,胶质瘤早日得到治疗。

过程:

本教程通过在windows环境下:Qt创建Dll文件-》使用创建的Dll

正文:

①win键启动-》搜索Qt

我这里装了两个版本的Qt Creator,如果有朋友和我一样的话,随便使用哪个都行,我这里选择4.5.0的Creator编辑器。

创建Dll文件:

②打开QtCreator,创建项目(点击NewProject)

选择创建库的类型

③选择Library->C++库/QtCreator插件->确认选择(Choose)

起名

创建项目名称,之后会生成几个同名但后缀不一样的文件。

选择编译器版本

此为选择编译器版本,上面为Vs2013 64位版本,下面为MinGw 32位,此次教程选择我选择后面的,至于选择哪个对结果没有影响

勾选需要的模板库,我这里不需要这些就为默认的。

生成的文件

让我们来看下,自动生成的架构有哪些文件:

mydll.h    mydll_global.h    mydll.cpp(三个文件)

mydll_global.h文件:

Q_DECL_EXPORT宏主要为了导出这个类,生成.dll的同时生成.lib文件。提供给外部接口供其他类使用。

mydll.h文件内容:

添加代码

③添加头文件的声明:

④在cpp文件中实现功能

编译

一切准备就绪,右键项目->构建

注意:直接点击F5会报错,dll没有启动函数。

查看编译输出

找到dll输出文件夹,这后面要使用,copy一下

在文件下确认是否生成成功!

创建测试dll项目:

①新建项目,选择Console选项,我这里使用控制台程序来测试dll的使用状态

②起名:ShowMyDll(根据自己喜好起名)

然后一直点击:下一步

③在ShowMyDll.pro文件里添加:

LIBS+=”dll所在路径”

④添加文件:

选择mydll.h和mydll_global.h文件进行添加:

⑤开始测试代码的可用性:

在main函数中添加代码:

ERROR:

点击运行测试,没有报错!但是结果出不来!

后来找到以下原因:

当时特别懒,就没把生成dll项目的dll拷贝出来,而是直接在LIBS路径添加了当时的路径,也许是被占用的缘故,结果不显示

解决:

于是我把dll拷贝到了ShowMyDll的生成文件夹下,LIBS+=的路径也改了。

成功运行:

MyDll.h

#ifndef MYDLL_H
#define MYDLL_H

#include "mydll_global.h"

class MYDLLSHARED_EXPORT MyDll
{

public:
    MyDll();
public:
    void Add(int a,int b);
};

#endif // MYDLL_H

Mydll_global.h

#ifndef MYDLL_GLOBAL_H
#define MYDLL_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(MYDLL_LIBRARY)
#  define MYDLLSHARED_EXPORT Q_DECL_EXPORT
#else
#  define MYDLLSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // MYDLL_GLOBAL_H

Mydll.cpp

#include "mydll.h"
#include <QDebug>

MyDll::MyDll()
{
}
void MyDll::Add(int a,int b){
    int c=a+b;
    qDebug()<<c;
}

Main.cpp

#include <QCoreApplication>
#include "mydll.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyDll test;
    test.Add(1,3);
    return a.exec();
}
The bottom line, for me, is simple.

Let’s hope it doesn’t take 500 years for a discipline of testing to becomes the standard for software developers.

From:dayu

您好!请登录

合作网站快捷登录:
点击取消回复

已有0评论

    大宇博客

    点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息