精华内容
下载资源
问答
  • QT调用DLL库小结

    千次阅读 2016-10-26 14:41:41
    QT调用DLL库小结: 背景: QT调用在vs下编译的DLL文件。 1. QT隐式调用失败,需要用QLibrary类显示调用才能成功。 2. 使用std::string传参,到dll里面就乱码了。需要使用char *来传参。 暂时就先总结这两点...

    QT调用DLL库小结:

    背景: QT调用在vs下编译的DLL文件。

    1.  QT隐式调用失败,需要用QLibrary类显示调用才能成功。

    2.  使用std::string传参,到dll里面就乱码了。需要使用char *来传参。


    暂时就先总结这两点吧。

    展开全文
  • 编写QT的dllQT调用QT的dllQT调用外部的dll,MFC程序调用QT的dll
  • QT调用DLL库失败原因总结

    千次阅读 2019-08-22 21:28:13
    前段时间我想用QT调用外部dll里面的函数,并且没有.h头文件和.lib静态。 发现有时候调用不成功,举例说明我的代码如下: typedef int (*Fun)(); QLibrary testLib("Protocol.dll"); //已把dll放在debug中 if ...

    QT调用动态链接库分为:

    1. 显式链接DLL,调用DLL的全局函数。
    2. 显示链接DLL,调用DLL中类对象、成员函数。
    3. 隐式链接DLL。

    详细情况见下面一篇博文:

    https://www.iteye.com/blog/qimo601-1397936

      前段时间我想用QT调用C#的dll里面的函数,并且没有.h头文件和.lib静态库。由于只有dll文件,所以用显式链接。
      但是在运行过程中发现有时候调用不成功,举例说明,代码如下:

    typedef int (*Fun)();
    QLibrary testLib("Protocol.dll"); //已把dll放在debug中
    if (testLib.load())
    {
            Fun getObj = (Fun)testLib.resolve("OpenPort");
            if (getObj)
                    {qDebug()<<"getObj";}
            else
                    {QMessageBox::about(NULL,"result","resolve unSuccessfully");}
    }
    

    总结了以下几个可能导致失败的原因:

    • 第一,搞清楚DLL文件是不是.net的,如果是则需要转换一下,用类库去封装C#的dll,在函数前面加上extern “C” _declspec(dllexport) ,这样编译完成生成的.lib .dll文件就可以被Qt项目直接调用了。可参考以下文章:

    https://blog.csdn.net/weixin_42420155/article/details/81060945
    https://blog.csdn.net/weixin_42420155/article/details/81538889

    • 第二,搞清楚DLL的位数,并且QT的编译器的版本要和DLL对应,我就是这样解决的问题,把QT重新安装了一遍换成32位的,就可以成功。不过我也从MSVC换成了MinGW,这个也是影响因素之一。
    • 第三,声明的函数名称是DLL中实际的函数名,可能是函数名不同导致,打开DLL找到正确的函数名尝试一下。并且,函数的参数声明也要正确。
    • 第四,调用的DLL可能存在从属关系,利用函数查看工具查看缺少哪个库文件。
    展开全文
  • QT调用dll、外部程序调用QT的dll.md

    千次阅读 2017-11-26 22:27:23
    QT调用外部的dll: 直接使用 QLibrary::load() 加载dll,使用 QLibrary::resolve() 查找函数地址加载函数即可。 QT调用QT的dll: 新建子目录项目: 添加子项目: 添加 Application 工程,然后把除了main.cpp...

    QT可以调用外部的dll,也可以调用QT的dll,外部程序也可以调用QT写的dll界面。

    • QT调用外部的dll
      直接使用 QLibrary::load() 加载dll,使用 QLibrary::resolve() 查找函数地址加载函数即可。

    • QT调用QT的dll

    新建子目录项目:
    这里写图片描述
    添加子项目:
    这里写图片描述
    添加 Application 工程,然后把除了main.cpp之外的东西删掉,后面用这个调用 QT 的dll:
    这里写图片描述
    再添加一个子项目,选择c++库:
    这里写图片描述
    选择共享库:
    这里写图片描述
    把生成的testdll.cpp和testdll.h删除,然后添加一个界面:
    这里写图片描述
    修改外边的test.pro配置:

    TEMPLATE = subdirs
    #顺序编译
    CONFIG += ordered
    SUBDIRS += \
        testDll \
        test

    修改test.exe的test.pro配置:

    QT      += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = test
    TEMPLATE = app
    SOURCES += main.cpp
    #包含路径
    INCLUDEPATH +=  $$PWD/../testdll
    #输出路径
    CONFIG += debug_and_release
    CONFIG(debug,debug|release){
        DESTDIR = $$PWD/../Debug
    }else{
        DESTDIR = $$PWD/../Release
    }
    #链接lib
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../Release -ltestdll
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../Debug/ -ltestdll

    修改 testdll.pro :

    QT      += widgets
    TARGET = testDll
    TEMPLATE = lib
    DEFINES += TESTDLL_LIBRARY
    SOURCES += \
        dialog.cpp
    HEADERS +=\
            testdll_global.h \
        dialog.h
    unix {
        target.path = /usr/lib
        INSTALLS += target
    }
    FORMS += \
        dialog.ui
    #编译路径
    CONFIG += debug_and_release
    CONFIG(debug,debug|release){
        DESTDIR = $$PWD/../Debug
    }else{
        DESTDIR = $$PWD/../Release
    }

    main.cpp中使用dll:

    #include <QApplication>
    #include "dialog.h"
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        //使用dll
        Dialog d;
        d.show();
        return a.exec();
    }
    • MFC调用QT写的dll界面

    https://github.com/qtproject/qt-solutions/tree/master/qtwinmigrate 提供了MFC调用QT写的dll的方法。
    新建testQt的dll子项目, 建立后删除.h和.cpp,添加一个界面,然后将 qtwinmigrate/src 目录下的 qmfcapp.cpp、qmfcapp.h、qwinwidget.cpp、qwinwidget.h qtwinmigrate\examples\qtdll 目录下的 main.cpp 复制到 testQt 目录下并添加到工程中。
    使用QT5.5.1 mingw编译时需要把qwinwidget.cpp中包含 qplatformnativeinterface.h 的代码修改为:

    #include <QtGui/5.5.1/QtGui/qpa/qplatformnativeinterface.h>

    修改 main.cpp 中导出函数显示添加的界面:

    extern "C" __declspec(dllexport) bool showDialog( HWND parent )
    {
        QWinWidget win( parent );
        win.showCentered();
        //显示界面
        Dialog d(&win);
        d.exec();
        return TRUE;
    }

    用vs新建一个MFC工程,在按钮按下的地方加载testqt.dll并显示界面:

    void CtestQtDllDlg::OnBnClickedButton1()
    {
        TCHAR dllName[] = _T("testQt.dll");
        HMODULE hDLL = LoadLibrary(dllName);
        if (hDLL != NULL)
        {
            typedef bool(*pShow)(HWND parent);
            pShow fp1 = pShow(GetProcAddress(hDLL, "showDialog"));
            if (fp1 != NULL)
                fp1(m_hWnd);
            FreeLibrary(hDLL);
        }
        else
        {
            CString strInfo;
            strInfo.Format(_T("Cannot Find %s"), dllName);
            AfxMessageBox(strInfo);
        }
    }

    效果:
    这里写图片描述
    代码(QT5.5.1mingw VS2015):http://download.csdn.net/download/yangyang031213/10133694
    https://github.com/yangyang0312/cpp/tree/master/Qt/TestQtDll

    展开全文
  • Qt调用dll的隐式调用

    千次阅读 2018-11-09 12:50:36
    Qt调用dll的隐式调用 一、前言: Qt调用dll的例子,在网上找了很多个,始终由于自己对Qt不熟的原因总是 失败(本人一直使用vs开发,由于工程上要提供sdk给Qt工程师调用导致各种问题),经过一番折腾终于可以实现...

    一、前言:

    Qt调用dll的例子,在网上找了很多个,始终由于自己对Qt不熟的原因总是 失败(本人一直使用vs开发,由于工程上要提供sdk给Qt工程师调用导致各种问题),经过一番折腾终于可以实现其中的一种调用方式:隐式调用。
    当然,Qt调用dll的方法好多种,然后毕竟不是专门搞Qt的,所以没有专门归纳各种调用方式,紧紧调用成功一种,记录下来。

    二、Qt调用Qt写的dll

    1、建c++库生成dll、lib
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    把所有打钩的去掉,然后一直下一步,完成。
    在这里插入图片描述
    在这里插入图片描述
    编写了两个函数,test01 和 getString(这个函数故意设置,请看后面),功能很简单
    2、新建工程包含头文件.h
    在这里插入图片描述
    在这里插入图片描述
    3、配置库lib
    在这里插入图片描述
    4、将dll放到exe目录
    在这里插入图片描述
    5、写客户端代码

    int main(int argc, char *argv[])
    {
        SecondDlltest test;
        test.test01();
    
        unsigned char  str[]="hello";
    
        std::string temp="hello";
        std::string text=test.getString(temp);
        qDebug()<<text.c_str()<<endl;
    }
    

    6、运行看效果
    在这里插入图片描述

    三、Qt调用vs写的dll(为何要单独讲?因为其中有坑,后面补上)

    过程一样:
    1、生成dll、lib,此时函数和Qt的类是一样的功能
    在这里插入图片描述
    在这里插入图片描述
    2、添加.h、配置lib、dll放到exe目录下(过程一样)
    3、客户端代码
    在这里插入图片描述
    4、运行看效果
    在这里插入图片描述
    请认真看效果,test01已经调用成功,而getString导致了bug,程序崩溃,如何补救?下一节讲解

    四、总结分析

    Qt调用Qt自身的dll,在一切环境下都能正常运行,vs工厂调用vs的dll也能正常调用,然而当跨环境时候,Qt调用vs的dll就出现了问题,原因是:字符集编码引起,QT默认是UTF-8字符集,而vs默认的是Unicode字符集,用c++同一个string写进去的时候(exe写内存)和读取时候(dll读取)的格式不一样,导致乱码了(附上一张内存图,exe中为hello,而dll中显示的是乱码)
    在这里插入图片描述
    在这里插入图片描述
    然而此时程序已经崩溃,不能继续运行了。
    详细分析后,过程应该是这样的:
    1、dll用vs的Unicode编译,认为参数安装Unicode格式读取
    2、Qt按照UTF-8格式将hello,写入参数当中
    3、参数在内存是utf格式的串
    4、dll拿到这块内存,用Unicode格式翻译
    5、翻译出错,内存数据乱码,程序崩溃
    怎么避免这个问题,下一节讲解

    展开全文
  • Qt调用DLL

    2020-04-19 16:39:20
    同一编译器同一版本QT调用Qt自己写的DLL(隐式调用)。 一、Qt调用程序和DLL不在同一项目 1.创建Qt控制台应用程序 2.添加->外部->选择外部文件路径,确认Lib加载的路径。加载完成后.pro文件中会...
  • 文件包含了Qt调用MFC的插件、调用DLL so文件的方式,具体的都以文档的形式罗列出来,文档中的例子全是亲自实践过了,完全可用。
  • QT调用dll

    2016-06-18 18:39:59
    Qt调用dll中的功能函数 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的。并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下:  void ...
  • 调用DLL文件中的函数用来处理字符串,要处理的字符串是QString类型的,DLL文件中的函数是这样的,unsigned char Encode(unsigned char *pS,unsigned char *pD,unsigned char Length),要实现这样的调用应该怎么做。
  • 简单介绍了如何用QT开发DLL库,和如何调用DLL库中的函数,开发环境为VS2008+QT
  • QT隐式调用DLL文件

    2018-11-28 17:09:23
    前言:遇到的问题:无法导入对应的dll动态链接,最后发现可能是因为dll是32位的,而编译器是64位的,最后发现一共有两个dll,不能只导入一个,因为...隐式调用必须有三个文件dll文件,lib文件,.h文件  * 1...
  • QT-DLL库调用.zip

    2020-06-18 15:17:06
    该资源主要介绍如何在Qt调用C++动态链接库,包括一个动态链接库文件和一个Qt应用程序。相关的博文介绍了该资源调用的具体方法和步骤,需要可以参考鄙人文章《QT 调用外部C++动态链接库方法》
  • Qt——pro文件的使用&Qt调用dll

    千次阅读 热门讨论 2018-04-19 17:36:53
    学会利用官方文档很重要,这里我简单地讲下怎么找到我们想要的内容比如这篇文章的主题--pro文件。 搜索Qt Document   在搜索栏中输入pro file,即可看到.pro文件的所有相关文档 点击第二个链接,就可以看到...
  • Qt调用dll

    千次阅读 2018-09-23 17:23:43
    DLLSHARED_EXPORT Dll* getDllObject(); //获取类Dll的对象 DLLSHARED_EXPORT void releseDllObject(Dll*); //获取类Dll的对象 DLLSHARED_EXPORT void helloWorld(); DLLSHARED_EXPORT int add(int a,int b);.....
  • QT Creator在window平台下面有两个安装版本: qt-opensource-windows-x86-mingw491_opengl-5.4.2 qt-opensource-windows-x86-msvc2010_opengl-5.4.2 这两个版本的区别就在于:QT Creator 所选择的编译器和调试器不同...
  • QT调用DLL文件

    2015-04-17 13:52:28
    动态链接英文为DLLDLL提供了一种方法,使工程可以调用已经封装好的函数,从而实现代码块的重复使用和封装。本文实现DLL文件QT调用
  • 生成dll文件 创建一个空的 Win32 Console Application项目: 设置为dll类型和空的工程: ...在cpp文件中添加函数,如果需要添加对应的依赖项,依赖项需与调用dll文件的工程依赖项相同,或者调用...
  • QT导出dll 与 QT调用dll

    万次阅读 2011-08-11 15:19:05
    这篇内容分两部分:第一部分是 QT在 windows 上 DLL的导出和调用;  第二部分是 QT在 linux 上 DLL(os)的导出和调用;    /////////////////////////
  • QT 调用 DLL 方法

    千次阅读 2015-01-16 16:44:53
    Qt调用DLL方法一:使用Win32 API 在显式链接下,应用程序必须进行函数 调用以在运行时显式加载 DLL。为显式链接到 DLL,应用程序必须: ? 调用 LoadLibrary(或相似的函 数)以加载 DLL 和获取模块句柄。 ? 调用...
  • 这里说的是(我这儿用的是Qt4.7.0):一个实现加法功能函数封装在Dll文件中 1.用Qt 生成一个项目 不要ui(也可以要)。 2.把pro文件里面的app改成lib,这样之后就能生成Dll文件了。 3、具体实现方法在我的实例...
  • QT调用mfc dll和qt dll

    热门讨论 2011-08-23 17:23:12
    该资源能够使用qt生成dll, 同时又mfc dll的例程,同时有使用qt调用 mfc 和qt dll的例程 。对于 学习使用qt dll很有帮助。
  • 于是开始让我调研Qt中相关的插件的使用,由于Qt的DLL文件是可以带界面的,所以在Qt中使用DLL来封装以前的插件是非常合适的,本文将针对Qt在windows、Linux平台的调用方式进行总结,具体使用方式详见Qt调用动态方式...
  • Qt调用DLL动态接口函数程序崩掉

    千次阅读 2014-11-27 17:57:04
    工作中使用Qt开发,调用外部动态.dll,在调用接口函数时总是运行之后崩掉,提示段错误!单步调试总有变量被意外改动,弄了两天在同事的帮助下解决! 方法如下:在定义接口函数指针时添加 _stdcall,它的缺陷是...
  • 如题,现在有一个dll文件,我想在Qt程序里调用它,应该怎么实现
  • Qt如何调用dll文件

    千次阅读 2017-09-29 15:16:21
    下面给出一个完整的例子: testDLL.dll为自定义的dll文件,将其复制到程序的输出目录下就可以调用。#include #include #include #include typedef int (*Fun)(int,int); //定义函数指针,以备调用 int ...
  • qt中使用dll库的方法

    2017-07-31 17:24:01
    qt调用dll库文件
  • Qt显示链接调用dll库

    2019-07-26 18:32:51
    Qt使用外部共享有两种方法,隐式调用链共享(有.lib和.h)和显式调用共享(仅有.dll文件)。这里我分享显式调用共享使用方法,显示要麻烦些,而且只有.dll文件。 一:在之前我必须讲讲我遇到的一些错误。我...
  • QT调用QT Dll

    2013-07-30 18:21:59
    开发环境: QT5.0.2(MinGW) QT既可调用VC封装的Dll,也可调用QT自身封装的Dll。当然VC也可调用QT封装的Dll。这里主要讲其中的QT调用QT Dll。...注意:VC调用QT封装的Dll最关键的点是...QT调用QT Dll,在Dll中不需要
  • Qt调用zlib库文件解压缩zip文件

    千次阅读 2016-03-22 21:18:15
    网上很多的使用quazip开源源码库解压和压缩,但是quazip要自己编译,而编译又对软件有要求,quazip支持的平台有限,所以不能通用,下载的别人编译好的 lib库文件,又会因为Qt版本的限制而不能用。 经过自己多天的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,671
精华内容 4,268
关键字:

qt调用dll库文件