精华内容
下载资源
问答
  • dll的创建及调用
  • Qt 加载动态库DLL

    2017-06-19 15:47:11
    1. 首先生成DLL,或者有现成的。 #ifndef TEST_H #define TEST_H #include "test_global.h" #include #include /* 在Windows上,还必须使用__declspec(dllexport)编译器指令从DLL显式导出该函数 */ #ifdef Q_...

    1. 首先生成DLL,或者有现成的。

    #ifndef TEST_H
    #define TEST_H
    
    #include "test_global.h"
    #include <QString>
    #include <iostream>

     
    

    /* 在Windows上,还必须使用__declspec(dllexport)编译器指令从DLL显式导出该函数 */
    #ifdef Q_OS_WIN
    #define MY_EXPORT __declspec(dllexport)
    #else
    #define MY_EXPORT
    #endif
    
    extern "C"
    {
    
    void hello(void *in, void *out);
    }
    #endif // TEST_H
    #include "test.h"
    
    MY_EXPORT void hello(void *in, void *out)
    {
        memcpy((char *)out, (char *)in, 512);
    }
    


    2.调用代码

    #include "mainwindow.h"
    #include <QApplication>
    #include <QLibrary>
    #include <QDebug>
    
    typedef int (__stdcall *lib_form)(void *, void *);  //声明一个函数类型
    lib_form dll_hello;
    
    
    bool LoadDll()
    {
        QString input = "hello!";
        QString out = "";
        char outbuf[512] = {0};
    
        /* 获取路径 */
        QString DllPath = "C:/Users/flysea/Documents/test5/MyDebug/test5";
    
        /* 加载函数 */
        QLibrary Lib;
        Lib.setFileName(DllPath);
        if(!Lib.load())
        {
            qDebug() << "Load fail";
            return false;
        }
    
        dll_hello = (lib_form)Lib.resolve("hello");
        if(!dll_hello)
        {
            qDebug() << "Lib resolve fail";
            return false;
        }
    
        /* 执行 */
        QByteArray pInput = input.toUtf8();
        dll_hello(pInput.data(), outbuf);
        out = QString::fromLocal8Bit(outbuf);       //返回值->转换字符格式
    
        qDebug() << out;
    
    
        return true;
    }
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        LoadDll();
    
        return a.exec();
    }



    展开全文
  • qt 添加和使用动态库

    2021-03-25 17:03:06
    右键选择添加动态库,选择lib文件夹下的.dll动态库,根据平台选择windows .添加后的结果如下: 注意:这里也可以手动添加.lib和.h的路径。 3. 在源文件中的引用: 在include 文件夹中存在.h文件 qmqttclie...

    一 编译mqtt库
    1.  从git库下载 mqtt库的时候一定要切换到qt版本对应的分支。 比如 5.12.6 

     

    . qt 需要使用动态库 Qt5Mqtt.dll

    使用方法:

       1.  建立include 和 lib文件夹 。拷贝.dll文件到lib ,拷贝 lib库对应的.h文件到 include

     2.   打开工程文件.pro 编辑.pro文件。 右键选择添加动态库,选择lib文件夹下的.dll动态库,根据平台选择windows .添加后的结果如下:

    注意:这里也可以手动添加.lib和.h的路径。

    3.  在源文件中的引用:

      在include 文件夹中存在.h文件   qmqttclient.h

    那么

       #include "qmqttclient.h"

      QMqttClient *m_client;  //正文引用库里面的函数。

     编译正确。

    完。

    补充 如果上续有问题 参考下面解决:

    1. 从编译生成的库里面,拷贝lib和inlcude到自己的工程目录。在include目录下面 新建QtMqtt目录,拷贝.h文件到QtMqtt目录
    2. 加载动态库。.a文件
    3. 添加 include/QtMqtt/QtMqttDepends 文件。
    4. 修改工程里面的头文件 为  “QtMqtt/qmqttclient.h”
    5. 注意 去掉 .pro文件里面的 mqtt模块。

    编译mqtt官方库参考如下链接:

    编译qmqtt官方库_一帘忧梦的博客-CSDN博客

    展开全文
  • 1.在qtcreater中按如下步骤创建动态库动态库名为mydll: 选择Library项目,C++库 选择共享库: 选择qt自带的kit: 在工程中自动生成的mydll.pro文件里内容如下: #---------------------------------------...

    系统1:ThinkPad T570、Windows10、QT5.12.2(Qt Creater 4.8.2)
    一、动态库.dll的创建和调用
    1.在qtcreater中按如下步骤创建动态库,动态库名为mydll:

    选择Library项目,C++库在这里插入图片描述
    选择共享库:在这里插入图片描述
    选择qt自带的kit:
    在这里插入图片描述
    在工程中自动生成的mydll.pro文件里内容如下:

    #-------------------------------------------------
    #
     # Project created by QtCreator 2019-04-05T11:14:57
    #
    #-------------------------------------------------
    
    QT       -= gui #在选择需要的模块时,我只选用了QtCore,没有使用QtGui
    
    TARGET = mydll #我配置的动态库的名字:mydll
    TEMPLATE = lib #生成库时该字段为lib;生成执行文件时为:app
    
    DEFINES += MYDLL_LIBRARY #将MYDLL_LIBRARY添加为编译时的预处理器宏,在share_global.h中使用
    
     # The following define makes your compiler emit warnings if you use
     # any feature of Qt which has been marked as deprecated (the exact warnings
     # depend on your compiler). Please consult the documentation of the
     # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
     # You can also make your code fail to compile if you use deprecated APIs.
     # In order to do so, uncomment the following line.
     # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    SOURCES += \
            mydll.cpp
    
    HEADERS += \
            mydll.h \
            mydll_global.h 
    
    unix {
        target.path = /usr/lib
        INSTALLS += target
    }
    

    mydll.h文件内容如下编写,其中我只添加了sum和squaresum两个函数定义,其他的为自动生成:

    #ifndef MYDLL_H
    #define MYDLL_H
    #include "mydll_global.h"
    class MYDLLSHARED_EXPORT Mydll
    {
    public:
        Mydll();
        int sum(int a,int b);
        int squaresum(int a,int b);
    };
    #endif // MYDLL_H
    

    mydll_global.h文件为自动生成,在此不多描述。

    mydll.cpp文件中如下编写:

    #include "mydll.h"
    Mydll::Mydll()
    {
    }
    int Mydll::sum(int a, int b)
    {
        return (a+b);
    }
    int Mydll::squaresum(int a, int b)
    {
        return (a*a+b*b);
    }
    

    随后按Ctrl+B键来构建该项目,构建成功后会在工程文件所在的同级目录下生成build-mydll-Desktop_Qt_5_12_2_MinGW_64_bit-Debug文件夹,该文件夹内有libmydll.a,mydll.dll和mydll.o三个文件,我们需要用的是mydll.dll。

    2.在qtcreater中按如下步骤创建使用动态库的工程,工程取名为UseLib。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    将mydll.h和mydll_global.h两个文件从mydll项目文件夹中拷贝到UseLib工程源文件夹下(F:\QTCode\TestCode\TestLib\uselib\UseLib)
    在mainwindow.h文件中添加动态库的头文件#include “mydll.h”,并定义一个动态库类对象Mydll mylib,代码如下:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include <QMainWindow>
    #include "mydll.h"
    namespace Ui {
    class MainWindow;
    }
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
        Mydll mylib;
    private slots:
        void on_pushButton_clicked();
    private:
        Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H
    

    将mydll项目中生成的mydll.dll文件放到UseLib工程源文件夹下。
    在UseLib.pro文件的最后一行添加如下代码,将动态库包含进当前项目:

    LIBS +=-L$$PWD -lmydll    # $$PWD表示当前路径,mydll根据生成动态库的工程的mydll.pro里面的TARGET = mydll得到
    

    mainwindow.ui如下图布局:
    在这里插入图片描述
    mainwindow.cpp如下编写代码:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    void MainWindow::on_pushButton_clicked()
    {
        int a = ui->lineEdit1->text().toInt();
        int b = ui->lineEdit2->text().toInt();
    
        int nsum = mylib.sum(a,b);
        QString str = QString::number(nsum);
        ui->lineEditsum->setText(str);
    }
    

    运行结果如下:
    在这里插入图片描述

    二、静态库.a的创建和调用
    步骤与动态库几乎相同,除了如下几点:
    1.创建静态库的名字为mylib,选择类型为“静态链接库”,如下:在这里插入图片描述
    2.静态库里面还是一个sum(int a,int b)的方法,静态库创建完之后,在构造出的“build-mylib-Desktop_Qt_5_12_2_MinGW_64_bit-Debug\debug”文件夹下会生成libmylib.a和mylib.o文件,我们要用的是libmylib.a文件。
    3.创建使用静态库的工程,取名为uselib,将libmylib.a和mylib.h拷贝到项目源文件路径下和构造路径下
    4.在uselib.pro中的最后一行添加

    LIBS +=-L$$PWD -lmylib
    

    5.在mainwindow.h中添加#include “mylib.h”,并定义一个类对象Mylib mylib;

      #ifndef MAINWINDOW_H
        #define MAINWINDOW_H
        #include <QMainWindow>
        #include "mylib.h"
        namespace Ui {
        class MainWindow;
        }
        class MainWindow : public QMainWindow
        {
            Q_OBJECT
        public:
            explicit MainWindow(QWidget *parent = nullptr);
            ~MainWindow();
        private slots:
            void on_pushButton_clicked();
            Mylib mylib;
        private:
            Ui::MainWindow *ui;
        };
        #endif // MAINWINDOW_H
    

    6.在mainwindow.cpp中添加如下代码:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    void MainWindow::on_pushButton_clicked()
    {
        int a = ui->lineEdit1->text().toInt();
        int b = ui->lineEdit2->text().toInt();
        int nsum = mylib.sum(a,b);
        QString str = QString::number(nsum);
        ui->lineEditsum->setText(str);
    }
    

    运行结果如下:

    在这里插入图片描述

    注:linux下按照如上流程创建和调用静态库 亲测成功过,用的系统为
    硬件:NVIDIA Tegra X2
    系统:Ubuntu 16.04LTS
    QT版本:QT5.5.1(Qt Creater 3.5.1)
    但在linux下调用动态库的时候会失败,具体后续我会再研究一下。

    展开全文
  • qt添加第三方库dll

    千次阅读 2019-06-20 09:35:15
    QT中加载动态链接 一.添加第三方的头文件 这个问题再简单不过了,不过我还是要说下。 首先,添加头文件 #include "ControlCAN.h" 然后,再将这个头文件放到工程的目录下,就OK了,非常的简单 二.添加.lib文件...

    参考:https://www.cnblogs.com/enumhack/p/7474731.html

    以下是参考以上链接大佬博客内容:

    QT中加载动态链接库

    一.添加第三方的头文件

    首先,添加头文件  #include "ControlCAN.h"

    然后,再将这个头文件放到工程的目录下,就OK了,非常的简单

    二.添加.lib文件

    首先,将.lib文件放到对应的工程目录下(当然,放到其他路径也可以)。

    但是,仅仅做这一步是不行的,工程不会主动去包含这个.lib文件,你必须告诉他,lib文件在哪里,才可以。

    然后,在QT的工程中,你会看到一个.pro文件,比如,我的工程名为test_qt,那么我的文件就是test_qt.pro文件,在整 个QT界面的左上角,.pro文件是管理整个工程的,当要打开一个工程的时候,只要打开.pro,就可以打开整个工 程的所有东西。

            所以,我们要做的,就是在.pro文件中,加上一句话,告诉工程,.lib在哪里

    LIBS += -LE:/project/QT/usbcan_info/ -lControlCAN //注意这边添加的是绝对路径

     

    下面对这句话进行解析:

    1)+=这个符号是连接在一起的,不要自做聪明,给分开了,写成+ = ,这样就是错的!

    2)+=的左右两边可以有空格,也可以没有空格,随意的

    3)-L之后紧接着就跟着.lib文件所在的目录,比如,我的目录是在E盘下的project目录下的QT目录下的usbcan_info下,注意,是紧跟着,不要分开,分开就错啦!

    4)-l后面跟着的是.lib的文件名,注意,比如你的.lib文件时ControlCAN.lib,不要傻乎乎的写成了-lControlCAN.lib,不要带后缀,要写成-lControlCAN,同样,-l后面也没有空格

    完成以上的操作,就可以指定.lib文件了。其实说穿了很简单,就是把.lib随便放到一个目录下,然后告诉工程,你的.lib放到哪里了,叫什么名字。

     

    三.添加.dll文件

    一个工程编译成功后,会在工程目录下生成2个目录,一个是debug目录,一个是release目录(注意,如果一个工程刚刚新建,是没有这2二个目录的,不信的朋友可以看看)。

    其中,debug就叫做输出目录!因为工程编译后的.exe就在这个目录下。

    然后,将.dll文件放到这个目录下。

    以上内容为网上看到的第一种:

    第二种:首先将你想要用的dll添加到你的工程文件中去,也就是跟你的mainwidows在一级中,然后

    (1)在你的工程文件.h文件中加上一句:

    extern "C"{ #include "xxxxxx.h"}//或者是在头文件中加上这样一句引用

    (2)在你的pro文件中添加一句:

    添加相对路径:LIBS += -L$$PWD/./ -lxxxxx(xxxxx这个表示的就是文件名)

    这样你就可以找到你想要的dll文件了

    pro文件中添加的内容参考博客:https://blog.csdn.net/Littlehero_121/article/details/104819235

     

     

    展开全文
  • 在这个DEMO中,我用手写.pro和.pri的方式来组织项目的结构,并通过配置.pro文件封装了一个动态链接MyLib,在此分享给大家,一起学习~
  • Qt加载Qt动态库dll

    2021-06-18 14:01:59
    Qt加载含有socket模块的dll时 当加载含有network模块的动态库时,被加载的工程也需要在pro文件上加上 QT+=network语句,要不然会报错,找不到QTcpSocket头文件
  • 1 VS调用外部动态链接库dll的方法--Windows1.1 建立一个Win32控制台应用程序 1.2 如果搭建的是64位应用,需将平台调整为x64。 1.3 将程序源码和头文件、动态链接库和静态连接库拷贝到项目对应的文件夹中1.4 将上述...
  • 在使用Qt开发过程中,我们有时需要使用Qt创建动态库,通常情况下创建的动态库没有版本号,为了方便追综版本,需要为动态库添加版本号,这样方便代码的版本控制,那么如何操作了,只需要在Qt的工程文件中(.pro)添加...
  • Qt添加log4qt.dll动态库

    2020-08-01 10:32:55
    将log4Qt库通过QTCreator编译成动态库,然后移植到QT项目中。...我这里只用到了动态库log4qt.dll。 2、拷贝头文件和库到项目中 项目目录中,新建include和libs两个文件夹。拷贝头文件和库分别到这两个目录中。
  • VS2017+QT生成动态库(DLL)并完成调用

    千次阅读 2021-05-21 18:02:02
    一、环境介绍 QT版本: 5.12.6 VS版本: 2017 二、功能介绍 在VS2017环境下创建QT工程,并生成DLL库;...Window系统下QT5创建DLL动态库并完成调用:https://blog.csdn.net/xiaolong1126626497/ar...
  • QT加载动态链接——相对路径

    千次阅读 2019-05-29 21:51:21
    1、首先将lib文件和include文件夹拷到工程文件下 ...3、接下来就可以使用动态链接头文件的函数了 4、如果程序异常结束,是因为dll文件需要拷贝到build-COM-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug文件夹下 ...
  • 最近需要把部分功能打包给其他小组用,结果反馈VS2019生成的dll动态库Qt内调用不成功,无奈又拿Qt封装了一遍,记录下; 一、Qt生成dll动态库 先说版本,Qt5.15.1; 1、Qt内新建项目-Library-C++Library,type选...
  • 最近在做一个软件接入中移onenet平台时用到MQTT的动态库,找了一些资料才懂怎么用QT使用动态库,为了下次再使用在此记录下来备用。pro文件添加:目录:源码调用:!!!没玩呢,刚开始执行时,控制台黑屏,不知道为...
  • Qt生成调用动态链接库dll

    千次阅读 2019-01-12 22:36:41
    这个文件就是链接,又可以分为静态链接动态链接。 1. 静态链接 链接程序从中寻找需要的符号(函数和变量的名字),查找到就将其放入可执行文件,未查找到就报错。 使用静态链接的程序: (1)可...
  • QT添加库(静态库和动态库) 添加动态库的方法:** 就是把所有需要的dll库全部放到exe所在文件夹,和exe处于同一级目录下。 添加静态库的方法: 1.右键项目文件,点击添加库
  • qt和VS动态库调用示例

    2016-06-02 17:33:13
    qt4.7调用VS2012创建的动态库qt调用qt创建的动态库
  • QT编写的程序,除了生成可执行文件exe外,还根据模块将代码编写成了不同的DLL,这些DLL都是在编译的时候根据DLL以及他的头文件隐式调用的。现在出现在修改了某个DLL的代码后,仅编译修改的DLL,程序运行时偶尔会出现...
  • QT 动态库 dll 的生成与调用 生成dll 1、创建工程 以计算器Calculate为例 2、编写代码 编写声明部分 编写实现部分 运行(直接构建就行) 查看生成的 dll 工程文件 生成的dll(我用的是release模式) 简化 ...
  • qt使用动态库(DLL)

    2016-12-16 18:01:37
    本文主要讲解在QT开发环境中如何使用VC生成的DLLQT自身生成的DLL。...(1)动态连接,通常有.h .lib .dll三个文件,功能实现在dll中 (2)静态连接,通常有.h .lib二个文件,功能实现在l
  • 添加动态库:如:lipsap.so (不需要添加路径) LIBS+=-L$$PWD/…l (指定库的名称) (熟悉Linux语言的知道,PWD是当前路径的意思) 添加静态库:(修改一下)如:halcon.a win32:LIBS+=-LPWD/lib....../−lhalcon(不用...
  • Qt加载动态链接

    2020-12-20 18:00:48
    先制作个简单的动态链接,再在Qt里面加载它。【制作动态链接】先编写一个hello.c1 #include 2 inthello()3 {4 printf("hello world!\n");5 }在Linux下编译,生成hello.o:gcc -c hello.c编译成动态链接...
  • 6-Qt5创建C++动态库DLL

    2019-08-27 16:19:26
    6-Qt5创建C++动态库DLL 为提高代码复用性,实现模块化开发,我们通常会对一些常用函数进行封装,通过调用共享库库的方法实现,Qt自身便能构建共享库,本教程以构建动态链接库为例进行讲解。 1. Qt新建共享库工程 ...
  • qt编写dll动态链接

    千次阅读 2021-01-24 21:26:34
    Qt环境: Qt 5.14.2 编译器:MinGW-W64 8.1.0 ...dll,即 Dynamic Link Library,意思是动态链接动态链接可以在多个程序之间共享,使程序占用更少的资源。 用 Qt 创建 dll(纯手工版) 制作 dll.
  • Linux下动态库是.so文件。 Qt嵌套在visual studio时,编译器是MSVC,而Qt Creator的编译器是MinGW,针对MSVC和MinGW这两种编译器,作个简单的介绍: MSVC是指微软的VC编译器。 MinGW是指是Minimalist GNU on ...
  • Qt pro文件配置dll和lib动态库的方法

    千次阅读 2018-01-09 19:22:19
    #------------------------------------------------- ...# Project created by QtCreator 2017-12-02T18:29:37 # #------------------------------------------------- QT += core gui multimedia #########
  • Qt 编译动态库只生成dll没有lib文件

    千次阅读 2020-11-24 11:27:16
    背景描述: ... 主动修改库A为动态库(.pro文件去除CONFIG += staticlib),只生成dll而无lib文件; 现象a原因和解决方案: 原因:库A部分组件加载时涉及C++和C底层库,VS编译时可由VS编译环境完成查找和
  • vs2015创建QT界面动态库(dll

    千次阅读 2019-12-30 09:02:22
    最近做优化一个QT界面的医学三维重建系统,网上找了很多资料,发现要么不全,不是自己想要的东西,要么时代久远,还在用VC6.0,所以自己在成功实验的基础上,为了以后方便,也为了各同僚能共同进步,特将这点琐事记...
  • QT 动态加载dll

    万次阅读 2020-04-28 09:03:26
    最近在调用卡尔的库函数时候,发现他们仅仅提供了一个dll,于是百度调研QT动态加载dll的方式,在调用成功后分析给大家。 动态调用。在使用的时候才会加载dll进来,使用QT本身自己的加载机制,利用QLibrary进行动态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,952
精华内容 1,980
关键字:

qt添加动态库dll