利用qtwinmigrate生成Qt带ui界面的DLL详解

注意!!如果要被C#调用,则必须选择msvc编译器!!本文用的MinGW-32做演示


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

        在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”。 

1.下载QTWinmigrate  qtwinmigrate资源包-QT文档类资源-CSDN下载

2.找到资源包中的qtwinmigrate文件夹,将这个文件夹单独复制到一个文件夹里

利用qtwinmigrate生成Qt带ui界面的DLL详解_第1张图片

3.进入【qtwinmigrate】-【examples】-【qtdll】,qtdll 整个文件夹是我们直接拿来使用的文件夹,我们只需要将 qtdll.pro 修改成我们需要的样子即可。

4.打开 qtdll.pro ,选择合适的编译器,这里我选择 MinGW 32-bit

利用qtwinmigrate生成Qt带ui界面的DLL详解_第2张图片

 5.在项目中插入一个ui界面。

右键树头文件 qtdll -【Add New...】-【Qt】-【Qt设计师界面类】-【choose】

利用qtwinmigrate生成Qt带ui界面的DLL详解_第3张图片

 6.给界面起个名~

利用qtwinmigrate生成Qt带ui界面的DLL详解_第4张图片

 7.这里的ui界面根据个人需求随便画。我只实现一个小功能,方便在VS中调用的时候做测试。

点击一下【pushbutton】输出一个【“Congraduations!”】

利用qtwinmigrate生成Qt带ui界面的DLL详解_第5张图片

 8.下面修改 main.cpp 文件。

先将 uidll 的头文件包含进去,再将黄色框框里的代码进行替换

利用qtwinmigrate生成Qt带ui界面的DLL详解_第6张图片 将DLL发布接口函数的部分修改为如下代码:

 其中******是你界面文件的.h文件中定义的界面类名 

   extern "C" __declspec(dllexport) int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    ****** w;                     //*****是界面类的名字,如QWidget。w不需要改变
    w.show(); 
    return a.exec(); 
} 

9.将【Debug】换成【Release】,然后点个锤子构建项目。回到qtdll同级目录,出现下面这个说明构建成功,注意,是MinGW32-Release

 10.进入【build-qtdll-Desktop_Qt_5_12_11_MinGW_32_bit-Release】-【release】

这个文件就是包含我们 ui 界面的 dll 文件了

利用qtwinmigrate生成Qt带ui界面的DLL详解_第7张图片


二.  生成依赖库

1.创建一个新的文件夹,这个文件夹就是整个ui界面所有需要被调用的文件打包,把上面的 dll 文件复制进去,只复制dll文件即可!

我的路径: E:\QtDll

2.打开MinGW-32的终端,依次输入下面的黄字。点击回车后开始在QtDll文件夹内自动添加各种依赖库

利用qtwinmigrate生成Qt带ui界面的DLL详解_第8张图片

 完成后的文件夹如下:

利用qtwinmigrate生成Qt带ui界面的DLL详解_第9张图片

 如果我们需要调用这个ui文件,就把整个文件夹复制到对应的VC项目里就可以了

目前还没有调用成功,先写到这,以后再补充

你可能感兴趣的:(qt)