最近手头的一个项目需要做一个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
分享到:
相关推荐
在这篇文章中,我们将讨论如何在C#中调用QT的dll方法。首先,我们需要在QT平台上建立一个dll工程,设置头文件和源文件,然后生成dll文件。最后,我们可以在C#中使用DllImport特性来调用dll方法。 一、QT平台dll工程...
在本文中,我们将深入探讨如何使用QT框架封装动态库,并在VC++环境下进行调用,同时在动态库中实现向VC++窗口发送消息的功能。这个过程涉及到C++编程、QT库的应用以及Windows消息机制的理解。 首先,让我们了解QT库...
Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画、各种绚丽效果的 UI 都不在话下。...本例子代码实现将基于QT.6 QML开发的模块编译成可以在VS环境中直接使用的DLL库文件,并举例使用QZXing识别二维码。
在描述中提到,由于Qt本身并不直接支持Oracle接口,因此我们可以采用C语言编写动态链接库(DLL),封装Oracle的OCI接口,然后在Qt应用中调用这个DLL。这种方式使得我们可以独立于Qt平台特性来实现数据库操作,确保...
在本项目中,"VS2017+QT DLL UI.zip" 包含了使用Visual Studio 2017(VS2017)集成开发环境,通过MFC(Microsoft Foundation Classes)调用QT库创建带用户界面的动态链接库(DLL)的相关资源。这个项目结合了两个...
2. **从Visual Studio安装目录复制**:找到这些DLL文件所在的目录,一般位于`<VisualStudioInstallPath>\VC\Redist\MSVC`下,将它们复制到应用程序的部署目录中。 3. **确保兼容性**:对于Windows 7等旧版本操作系统...
实现功能:利用VS2012封装生成动态链接库(.dell和.lib)给QT调用 文件包含:1.VS2012生成动态库工程 2.QT5.5.1调用VS2012动态库工程(注释内含调用具体方法) 3.QT调用运行结果图片
开发者可能编写了自定义的类或函数来封装qtserialport的API,以便在应用程序中发送和接收十六进制数据。在开发过程中,他们利用Visual Studio进行编译和调试,通过Serialpor.VC.db和Serialpor.sln文件管理项目状态和...
QT编写DLL给外部程序调用示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明函数 必须与实际DLL中函数名及参数一致; [DllImport &...
MFC库的核心理念是面向对象编程,它将Windows API中的各种函数和结构封装成了一系列的C++类,如CWinApp、CWnd、CEdit等,这些类提供了丰富的成员函数和属性,让开发者能够以更抽象、更高层次的方式来编写代码。...
当用户点击.exe文件运行时,实际上是在调用MFCQtViewer中的核心逻辑,通过Qt库处理用户界面和事件响应,同时利用MFC与Windows系统的深度交互。 在提供的文件列表中,我们可以看到一些关键的动态链接库(DLL)文件,...
2. **数据发送**:用户通过Qt界面输入数据,程序将数据封装成UDP报文并发送出去。 3. **数据接收**:ACE的UDP套接字监听指定端口,当接收到数据时,触发回调函数,处理接收到的数据。 4. **UI更新**:接收到的数据...
- **动态链接库(DLL)**:为了扩展功能,可以将部分代码封装到DLL中,这样可以独立更新,降低主程序的体积。 - **第三方库**:VC项目可以更方便地集成其他C++库,例如Qt、wxWidgets等,以增强功能或性能。 4. **...
在本文中,我们将深入探讨如何使用C++编程语言和Visual C++(Vc)环境来实现动态曲线绘制、打印及预览功能。标题中的"adventure9zj Vc"可能是一个项目或库的名称,它提供了一个DLL(Dynamic Link Library)组件的源代码...
将VC和Qt结合起来实现进程间通信,通常是在VC项目中调用Qt的库。首先,确保你的VC项目链接了Qt库,并且包含了必要的头文件。然后,你可以使用Qt的`QSharedMemory`类在VC的代码中创建和管理共享内存。 1. **初始化Qt...
在实际项目中,为了提高代码的可维护性和复用性,通常会将DXF的读写操作封装到单独的类或模块中。这样,当需要处理DXF文件时,只需调用这个模块的相关接口,而无需关心具体的实现细节。 此外,还需要注意的是,DXF...
当时,本硕教学、项目开发采用的均为Visual C++ ,按照导师的要求,学生们的所有算法模块需要封装为动态链接库,以便可以很快的嵌入到新的项目中使用。作为对计算机稍微熟悉一点的助教,我和几个同事一起规范了函数...
在VC++项目中,常常需要集成如Boost、Qt等第三方库,这涉及到库的配置、头文件路径的添加以及链接器设置,以确保正确调用库函数。 “DynamicLibrary”指的是动态库,也即DLL(Dynamic Link Library)。与静态库不同...
在Windows操作系统中,UVC(USB Video Class)摄像头是一种遵循USB设备类标准的视频设备,它使得摄像头可以方便地在不同系统间进行互操作。UVC标准定义了摄像头硬件和软件之间的接口,允许应用程序直接访问摄像头的...
6. **验证编译结果**:提到已通过Qt调用验证成功,意味着可以将编译生成的库集成到Qt项目中,验证其正确性和兼容性。 7. **注意事项**:编译过程中可能遇到的问题包括依赖项缺失、路径配置不正确等。遇到问题时,应...