`
qimo601
  • 浏览: 3445943 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

【转】将QT开发的界面程序封装成DLL,在VC中成功调用

    博客分类:
  • Qt
阅读更多

最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多帮助,将心得写在这里供大家参考。

  PS:本文中谈的是用QT封装一个包含界面的DLL,然后在其他任何地方使用任何语言来调用这个DLL,不是那种在qt creator里面建一个dll工程,然后再在qt creator里建一个调用该dll的工程的情况(这种示例可参考该链接http://download.csdn.net/source/2855817)。

本文所讲的例子在qt 4.7.3 opensource 以及VC6.0/VS2005成功运行

首先,在qt creator中是可以直接建立一个C++ DLL工程的,编译以后也可以生成dll,但是这样生成的dll拿VC去调是不会成功的。后来在CSDN上看到有人发的这样一篇帖子(原文链接http://blog.csdn.net/normallife/article/details/5397980)。里面谈到 “因为 QT 必须有调用 QApplication 的 exec 方法,这样才能产生消息循环, QT 的程序才可以运行。所以说如果我们使用了 QT 编写了 dll 程序,在普通的 windows 程序中是不能调用的。在调用的时候会出现错误。当然 QT 提供了解决方法:那就是 QTWinmigrate”。喜出望外啊,赶紧的把QTWinmigrate下下来。
  打开QTWinmigrate文件夹,里面有几个目录,buildlib,doc,examples,lib,src。
  在examples目录下给出几个应用QTWinmigrate的例子,其中有一个就是qtdll,嘿嘿,用qt creator打开其中的qtdll.pro工程文件。因为这个是已经做好的程序,所以可以直接在此基础上修改。右键单击目录树最上层的工程名qtdll,选择“添加新有文件”,然后新建一个“QT设计师界面类”,类名什么的自己填上,点确定返回,可以看到后缀为.ui的界面文件及界面文件的.h文件和.cpp文件已经加入到qtdll工程里面了,界面你怎么画都行,剩下的步骤就是修改工程中的main.cpp文件
首先在main.cpp文件里面把界面文件的头文件include进来,然后将DLL发布接口函数的部分修改为如下所示:

  extern "C" __declspec(dllexport) int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  ****** w;
  w.show();
  return a.exec();
}
  
 
其中******是你界面文件的.h文件中定义的界面类名
  这样我们得DLL就做好了,然后点构建,就可以生成封装了QT界面并且可以用VC调用的DLL了

  在CSDN的第一篇技术贴,说的不详细的大家有什么不懂的可以问我,文章中有什么不对的欢迎大牛指教

 

转载:http://topic.csdn.net/u/20110706/20/200af06e-5010-4667-8f83-3c3cfb46cacd.html

分享到:
评论
1 楼 chy555chy 2016-03-16  
现在用VC写主要是为了兼容XP,想问一下如果你用QT实现的话,不是就需要带很多动态库才能运行?还是说也可以编译成和MFC一样的不用带那么多动态库的程序?

相关推荐

    C#调用QT的dll方法

    在这篇文章中,我们将讨论如何在C#中调用QT的dll方法。首先,我们需要在QT平台上建立一个dll工程,设置头文件和源文件,然后生成dll文件。最后,我们可以在C#中使用DllImport特性来调用dll方法。 一、QT平台dll工程...

    QT封装动态库VC调用, 动态库发送消息给VC窗口

    在本文中,我们将深入探讨如何使用QT框架封装动态库,并在VC++环境下进行调用,同时在动态库中实现向VC++窗口发送消息的功能。这个过程涉及到C++编程、QT库的应用以及Windows消息机制的理解。 首先,让我们了解QT库...

    创建及调用基于QT5 QML的 DLL(举例QML中使用QZXing识别二维码)

    Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画、各种绚丽效果的 UI 都不在话下。...本例子代码实现将基于QT.6 QML开发的模块编译成可以在VS环境中直接使用的DLL库文件,并举例使用QZXing识别二维码。

    qt调用oracle接口

    在描述中提到,由于Qt本身并不直接支持Oracle接口,因此我们可以采用C语言编写动态链接库(DLL),封装Oracle的OCI接口,然后在Qt应用中调用这个DLL。这种方式使得我们可以独立于Qt平台特性来实现数据库操作,确保...

    VS2017+QT DLL UI.zip

    在本项目中,"VS2017+QT DLL UI.zip" 包含了使用Visual Studio 2017(VS2017)集成开发环境,通过MFC(Microsoft Foundation Classes)调用QT库创建带用户界面的动态链接库(DLL)的相关资源。这个项目结合了两个...

    msvc2017编译的qt程序打包后无法在win7运行的解决方法

    2. **从Visual Studio安装目录复制**:找到这些DLL文件所在的目录,一般位于`<VisualStudioInstallPath>\VC\Redist\MSVC`下,将它们复制到应用程序的部署目录中。 3. **确保兼容性**:对于Windows 7等旧版本操作系统...

    VS创建动态库及QT调用实例.rar_Qt动态库_qt vs_qt 编译动态库_vs 工程 qt lib_利用qt调用com

    实现功能:利用VS2012封装生成动态链接库(.dell和.lib)给QT调用 文件包含:1.VS2012生成动态库工程 2.QT5.5.1调用VS2012动态库工程(注释内含调用具体方法) 3.QT调用运行结果图片

    用Qt Vs写的串口程序

    开发者可能编写了自定义的类或函数来封装qtserialport的API,以便在应用程序中发送和接收十六进制数据。在开发过程中,他们利用Visual Studio进行编译和调试,通过Serialpor.VC.db和Serialpor.sln文件管理项目状态和...

    QT编写DLL调用示例 方法 参数 返回值 事件回调

    QT编写DLL给外部程序调用示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明函数 必须与实际DLL中函数名及参数一致; [DllImport &...

    mfco42d.dll

    MFC库的核心理念是面向对象编程,它将Windows API中的各种函数和结构封装成了一系列的C++类,如CWinApp、CWnd、CEdit等,这些类提供了丰富的成员函数和属性,让开发者能够以更抽象、更高层次的方式来编写代码。...

    MFCQtViewer可执行文件

    当用户点击.exe文件运行时,实际上是在调用MFCQtViewer中的核心逻辑,通过Qt库处理用户界面和事件响应,同时利用MFC与Windows系统的深度交互。 在提供的文件列表中,我们可以看到一些关键的动态链接库(DLL)文件,...

    ACE UDP Socket 通讯

    2. **数据发送**:用户通过Qt界面输入数据,程序将数据封装成UDP报文并发送出去。 3. **数据接收**:ACE的UDP套接字监听指定端口,当接收到数据时,触发回调函数,处理接收到的数据。 4. **UI更新**:接收到的数据...

    VB项目的暗箱VB项目改写

    - **动态链接库(DLL)**:为了扩展功能,可以将部分代码封装到DLL中,这样可以独立更新,降低主程序的体积。 - **第三方库**:VC项目可以更方便地集成其他C++库,例如Qt、wxWidgets等,以增强功能或性能。 4. **...

    ARTICLE_adventure9zj_Vc_

    在本文中,我们将深入探讨如何使用C++编程语言和Visual C++(Vc)环境来实现动态曲线绘制、打印及预览功能。标题中的"adventure9zj Vc"可能是一个项目或库的名称,它提供了一个DLL(Dynamic Link Library)组件的源代码...

    SharedMemory.7z

    将VC和Qt结合起来实现进程间通信,通常是在VC项目中调用Qt的库。首先,确保你的VC项目链接了Qt库,并且包含了必要的头文件。然后,你可以使用Qt的`QSharedMemory`类在VC的代码中创建和管理共享内存。 1. **初始化Qt...

    MFC,VC++读写DXF文件

    在实际项目中,为了提高代码的可维护性和复用性,通常会将DXF的读写操作封装到单独的类或模块中。这样,当需要处理DXF文件时,只需调用这个模块的相关接口,而无需关心具体的实现细节。 此外,还需要注意的是,DXF...

    基于Qt5框架开发的轻量级跨平台网络工具库 .rar

    当时,本硕教学、项目开发采用的均为Visual C++ ,按照导师的要求,学生们的所有算法模块需要封装为动态链接库,以便可以很快的嵌入到新的项目中使用。作为对计算机稍微熟悉一点的助教,我和几个同事一起规范了函数...

    Vc++开发MSDNDemo

    在VC++项目中,常常需要集成如Boost、Qt等第三方库,这涉及到库的配置、头文件路径的添加以及链接器设置,以确保正确调用库函数。 “DynamicLibrary”指的是动态库,也即DLL(Dynamic Link Library)。与静态库不同...

    openssl1.1.1b源码编译.rar

    6. **验证编译结果**:提到已通过Qt调用验证成功,意味着可以将编译生成的库集成到Qt项目中,验证其正确性和兼容性。 7. **注意事项**:编译过程中可能遇到的问题包括依赖项缺失、路径配置不正确等。遇到问题时,应...

    C#手写识别控件代码

    这个是一个封装的DLL,查看文章:https://blog.csdn.net/gigizhongyan/article/details/89519779 C#手写识别控件代码,是封装的类,目的是供QT调用。

Global site tag (gtag.js) - Google Analytics