qt写DLL文件并调用和出现的问题分析
来源:互联网 发布:美辰堂燕窝是假货 知乎 编辑:程序博客网 时间:2024/05/17 19:15
qt是C+的一个框架,GUI编程简单,同时又能编写C+的库文件,有时候甚至只是改几行代码,就能把一个GUI程序修改成C+的.dll文件,下面看具体的过程:
首先建立一个新项目,选择C++库
在这个界面会有模块的选择,选择你的DLL文件里面需要用到的库
创建完新项目之后,这个类就是你创建的新项目
接下来就要实现你自己的类和方法了
这里我只实现以个简单的方法。
/*.h文件***/
#ifndef UNTITLED2_H#define UNTITLED2_H#include "untitled2_global.h"class UNTITLED2SHARED_EXPORT Untitled2{public: Untitled2(); int ADD(int a,int b);};#endif // UNTITLED2_H
/****.cpp文件*******/
#include "untitled2.h"//构造Untitled2::Untitled2(){}//自己的方法int Untitled2::ADD(int a, int b){ return a+b;}
然后编译,会在debug文件夹下面生成对应的.DLL文件。
这样我们的一个最简单的DLL文件就编写成功了,接下来我们就要谈谈Qt调用DLL文件。简单的来说,Qt调用dll文件的方法有很多种,可以利用win32的API,也可以使用Qt自带的API调用dll文件。我们先来看看Qt自带的API是怎么调用的。当然测试用例就要你自己写了。并把DLL文件和所有的.h文件复制到你的测试用例文件夹下面。
1、显式调用
#include "mainwindow.h"#include "ui_mainwindow.h"#include "untitled1.h"#include <QDebug>#include <QLibrary>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked(){ //使用QLibrary类,将DLL文件引入 QLibrary m_pLibrary("F:\\Work_Space\\work\\untitled\\untitled.dll"); if (m_pLibrary.load()) { Untitled1 dll; qDebug()<<dll.add(2,4); } else { qDebug()<<m_pLibrary.errorString(); }}
如果你以为这样就可以了,那么我想告诉你还是太年轻了,运行之后妥妥的会出现这样的错误。
你也可以调试一下,来看看调试信息,这里就不多啰嗦啦,出现这种错误的原因是在exe文件所在的文件夹里面,exe文件运行时找不到DLL文件,解决办法也很简单,把DLL文件 复制到exe文件所在的文件里面,没错,就是这么简单。
复制完之后再运行
结果妥妥的。
2、隐式调用
当然这个和显示调用基本没有什么区别,只是一个可以看见,一个看不见而已
在Pro文件里面加入
这儿可以用绝对路径,当然也可以用相对路径咯
LIBS += "F:\Work_Space\work\untitled\untitled1.dll"
这时候的.cpp文件更简单
#include "mainwindow.h"#include "ui_mainwindow.h"#include "untitled1.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked(){ Untitled1 dll; qDebug()<<dll.add(2,4);}
结果不用说当然是一样的咯!
在做实际项目的过程中我遇到了一个很是坑的问题,
这个问题是因为指针的错误使用引起的,所以在实际的应用中,一定要注意指针的使用。
win32API的调用暂时没有测试,晚上测试用例很多,我就不写了,这样使用Qt写的DLL只适合Qt程序调用,如果要使用别的程序调用必须用 extern "C" { }
将方法包含,这样外界的程序才能调用。
- qt写DLL文件并调用和出现的问题分析
- QT使用记录关于调用DLL库文件出现的问题
- C#调用mfc写的Dll出现调用导致堆栈不对称问题
- qt中调用dll文件的方法
- C#调用C++写的dll文件出错问题msvcr100.dll
- Qt 编写DLL 并调用
- Qt 编写DLL 并调用
- Qt 编写DLL 并调用
- Qt 编写DLL 并调用
- VS写dll,并通过jni、jna调用注意问题
- c#调用delphi写的dll遇到并解决的问题
- VB.NET写的DLL调用问题
- QT生成DLL并调用DLL
- qt编写dll并qt调用
- Qt显式调用C++写的dll + 外一篇
- Qt显式调用C++写的dll + 外一篇
- Qt显式调用C++写的dll + 外一篇
- Qt显式调用C++写的dll + 外一篇
- 今天的精彩看点,你错过了吗?
- Java实现反转链表
- linux查看java jdk安装路径和设置环境变量
- 【杭电】[1257]最少拦截系统
- Java获取当前路径
- qt写DLL文件并调用和出现的问题分析
- java poi技术操作excel之写Excel(向Excel中写入值)
- poj1797&poj2263 dijkstra()贪心解瓶颈路问题2
- strlen的坑
- 多文件上传中重名文件问题,日期转特殊字符串
- 连接你的APP至WiFi设备(Connecting your App to a Wi-Fi Device)
- Android ListView子item高度定长固定值无效问题
- Android开发之Android studio单元测试简介
- 类中的静态成员变量和静态成员函数