将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

posted @ 2015-11-10 00:23  findumars  Views(8184)  Comments(0Edit  收藏  举报