21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数

一、功能说明

创建一个总项目,里面包含两个子项目,

子项目1生成动态链接库dll,里面包含一个加法和一个减法;

子项目2是带界面的可执行文件exe,使用LIBS += -L$$PWD/ -lxxx调用子项目1的dll。

二、创建子项目1

打开Qt,点击“NewProject”、“其他项目”、“子目录项目”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第1张图片

更改项目名称和位置

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第2张图片

选择编译器

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第3张图片

默认

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第4张图片

选择子项目1类型,“Library”、“C++库”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第5张图片

选择“共享库”,更改子项目1名称

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第6张图片

选择模块

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第7张图片

默认

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第8张图片

默认

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第9张图片

把“libsdll_global.h”中的如下代码,拷贝到“libsdll.h”中

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第10张图片

删除“libsdll.h”中的 #include "libsdll_global.h" 这行代码

删除“libsdll_global.h”文件

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第11张图片

更改libsdll.h中的代码

#ifndef LIBSDLL_H
#define LIBSDLL_H

#include 

#if defined(LIBSDLL_LIBRARY)
# define LIBSDLLSHARED_EXPORT Q_DECL_EXPORT
#else
# define LIBSDLLSHARED_EXPORT Q_DECL_IMPORT
#endif

class LIBSDLLSHARED_EXPORT LibsDll
{

public:
    LibsDll();

    int addFun(int value1, int value2);

    int subFun(int value1, int value2);
};

#endif // LIBSDLL_H

更改libsdll.cpp中的代码

#include "libsdll.h"

LibsDll::LibsDll()
{
}

int LibsDll::addFun(int value1, int value2)
{
    return (value1 + value2);
}

int LibsDll::subFun(int value1, int value2)
{
    return (value1 - value2);
}

右击子项目1,选择重新构建

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第12张图片

构建完成后,子项目1的构建目录下生成“LibsDll.dll”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第13张图片

三、创建子项目2

右击项目名称,选择“新子项目”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第14张图片

选择“Application”、“Qt Widgets Application”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第15张图片

更改子项目2名称

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第16张图片

默认

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第17张图片

默认

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第18张图片

把刚才生成的“LibsDll.dll”和子项目1的"libsdll.h"两个文件拷贝到子项目2中

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第19张图片

在子项目2的.pro文件中添加一行代码:LIBS += -L$$PWD/ -lLibsDll

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第20张图片

右击子项目2,选择“添加现有文件”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第21张图片

选择"libsdll.h"文件

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第22张图片

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第23张图片

在子项目2的界面文件mainwindow.ui中添加如下控件,并布局

更改 mainwindow.cpp的代码如下

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "libsdll.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    LibsDll dllLib;
    int ret = dllLib.addFun(ui->lineEdit->text().toInt(), ui->lineEdit_2->text().toInt());
    ui->label->setText(QString::number(ret));
}

void MainWindow::on_pushButton_2_clicked()
{
    LibsDll dllLib;
    int ret = dllLib.subFun(ui->lineEdit->text().toInt(), ui->lineEdit_2->text().toInt());
    ui->label->setText(QString::number(ret));
}

右击子项目2,选择重新构建

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第24张图片

构建完成后,再右击子项目2,选择运行。

如果程序运行失败,应用程序输出中显示“程序异常结束”,关闭Qt,重新打开Qt,再运行子项目2

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第25张图片

四、运行测试

输入两个数,点击“加法”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第26张图片

点击“减法”

21、Qt使用LIBS包含的方式调用动态链接库dll中的成员函数_第27张图片

你可能感兴趣的:(Qt小功能,qt,开发语言)