zoukankan      html  css  js  c++  java
  • 将QT开发的界面程序封装成DLL,在VC中成功调用

    最近手头的一个项目需要做一个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发布接口函数的部分修改为如下所示:

    Cpp代码  收藏代码
    1.   extern "C" __declspec(dllexport) int main(int argc, char *argv[])  
    2. {  
    3.   QApplication a(argc, argv);  
    4.   ****** w;  
    5.   w.show();  
    6.   return a.exec();  
    7. }  
    8.     

     
    其中******是你界面文件的.h文件中定义的界面类名
       这样我们得DLL就做好了,然后点构建,就可以生成封装了QT界面并且可以用VC调用的DLL了

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

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

    http://qimo601.iteye.com/blog/1675575

  • 相关阅读:
    Kubernetes中的Service Mesh(第5部分):Dogfood环境和入口
    A Service Mesh for Kubernetes(第1部分): Service的重要指标
    A Kubernetes in Service Mesh(第9部分):使用gRPC的乐趣和收益
    Automated, Self-Service Provisioning of VMs Using HyperForm (Part 2) (使用HyperForm自动配置虚拟机(第2部分)
    Authentication in Loopback Applications Against Bluemix(在针对Bluemix的Lookback应用中进行身份认证)
    java工具类-excel jxl
    南阳199
    南阳198
    南阳168
    南阳274
  • 原文地址:https://www.cnblogs.com/findumars/p/4951717.html
Copyright © 2011-2022 走看看