qt写DLL文件并调用和出现的问题分析

本文介绍如何使用Qt框架编写DLL文件,并演示两种调用DLL文件的方法:显式调用与隐式调用。此外,还分享了在实际项目中遇到的指针使用问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qt是C+的一个框架,GUI编程简单,同时又能编写C+的库文件,有时候甚至只是改几行代码,就能把一个GUI程序修改成C+的.dll文件,下面看具体的过程:
首先建立一个新项目,选择C++库
这里写图片描述
在这个界面会有模块的选择,选择你的DLL文件里面需要用到的库
这里写图片描述
创建完新项目之后,这个类就是你创建的新项目
这里写图片描述
接下来就要实现你自己的类和方法了
这里我只实现以个简单的方法。
/*.h文件***/

#ifndef UNTITLED2_H
#define UNTITLED2_H

#include "untitled2_global.h"

class UNTITLED2SHARED_EXPORT Untitled2
{

public:
    Untitled2();
    int ADD(int a,int b);
};

#endif // UNTITLED2_H

/****.cpp文件*******/

#include "untitled2.h"
//构造
Untitled2::Untitled2()
{
}
//自己的方法
int Untitled2::ADD(int a, int b)
{
    return a+b;
}

然后编译,会在debug文件夹下面生成对应的.DLL文件。
这样我们的一个最简单的DLL文件就编写成功了,接下来我们就要谈谈Qt调用DLL文件。简单的来说,Qt调用dll文件的方法有很多种,可以利用win32的API,也可以使用Qt自带的API调用dll文件。我们先来看看Qt自带的API是怎么调用的。当然测试用例就要你自己写了。并把DLL文件和所有的.h文件复制到你的测试用例文件夹下面。
1、显式调用

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "untitled1.h"
#include <QDebug>
#include <QLibrary>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()
{
    //使用QLibrary类,将DLL文件引入
    QLibrary m_pLibrary("F:\\Work_Space\\work\\untitled\\untitled.dll");
    if (m_pLibrary.load())
    {
        Untitled1 dll;
        qDebug()<<dll.add(2,4);
    }
    else
    {
        qDebug()<<m_pLibrary.errorString();
    }
}

如果你以为这样就可以了,那么我想告诉你还是太年轻了,运行之后妥妥的会出现这样的错误。
这里写图片描述
你也可以调试一下,来看看调试信息,这里就不多啰嗦啦,出现这种错误的原因是在exe文件所在的文件夹里面,exe文件运行时找不到DLL文件,解决办法也很简单,把DLL文件 复制到exe文件所在的文件里面,没错,就是这么简单。
复制完之后再运行
这里写图片描述
结果妥妥的。
2、隐式调用
当然这个和显示调用基本没有什么区别,只是一个可以看见,一个看不见而已
在Pro文件里面加入
这儿可以用绝对路径,当然也可以用相对路径咯

LIBS    += "F:\Work_Space\work\untitled\untitled1.dll"

这时候的.cpp文件更简单

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

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

void MainWindow::on_pushButton_clicked()
{

   Untitled1 dll;
   qDebug()<<dll.add(2,4);
}

结果不用说当然是一样的咯!
在做实际项目的过程中我遇到了一个很是坑的问题,
这里写图片描述
这个问题是因为指针的错误使用引起的,所以在实际的应用中,一定要注意指针的使用。
win32API的调用暂时没有测试,晚上测试用例很多,我就不写了,这样使用Qt写的DLL只适合Qt程序调用,如果要使用别的程序调用必须用 extern "C" { } 将方法包含,这样外界的程序才能调用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值