在最近的开发中需要做了demo,来验证公司的老项目能否在Qt上做重新开发;于是碰到的第一个问题那就是dll文件如何加载了;网上查阅了很多资料,记录一下已成功加载dll文件的方法,以防遗忘。

下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。

.h文件

#ifndef  _MYDLL_H
#define _MYDLL_H#ifdef MYDLL_EXPORTS
#define  MYDLL_API __declspec(dllexport)
#else
#define  MYDLL_API __declspec(dllimport)
#endif extern "C" MYDLL_API int add(int a, int b);#endif

.cpp文件

#include "mydll.h"extern "C" MYDLL_API int add(int a, int b)
{return (a + b);
}

编译成功后,会得到下面三个文件,mydll.h、MyDll.lib、MyDll.dll

然后打开Qt创建一个项目;我是把这三个文件全部拷贝到了运行工作目录;如下所示:

下面介绍一下Qt如何隐式调用dll文件:

打开.Pro文件

在工程文件中包含.h文件的路径以及库文件的路径即可,下面就是如何调用库文件中的函数了:

#include <QDebug>
#include <QLibrary>
#include "mydll.h"  //包含头文件int main()
{qDebug() << add(10, 20);return 0;
}

上述是隐式调用库文件的函数,还有一种显示调用方法,如下所示:

#include <QDebug>
#include <QLibrary>
#include "mydll.h"  //包含头文件

typedef int(*pFun)(int, int);int main()
{QLibrary mydll("MyDll.dll");if(!mydll.load()){qDebug() << "load dll error";}else{qDebug() << "load dll success";pFun myAdd = (pFun)mydll.resolve("add");if(myAdd){qDebug() << myAdd(1, 10);}else{qDebug() << "get Function address error";}}if(mydll.isLoaded()){mydll.unload();}return 0;
}

相较而言,隐式调用比显示调用更加简洁,通常都是选择隐式调用更为合适。

当然,在配置库文件的路径时,也可以选择用相对路径的方式,如下所示:

转载于:https://www.cnblogs.com/QingYiShouJiuRen/p/11428662.html

Qt如何调用VS编写的动态链接库(dll文件)相关推荐

  1. C#调用C++编写的COM DLL

    在C#调用C++编写的COM DLL封装库时会出现两个问题: 1.  数据类型转换问题 2.  指针或地址参数传送问题 首先是数据类型转换问题.因为C#是.NET语言,利用的是.NET的基本数据类型, ...

  2. Matlab调用动态链接库DLL文件

    环境:vs2015.Matlab2020 VS2015中建立工程, 建立工程如下两图所示 在头文件和源文件中分别添加头文件和源文件(代码如下所示) 头文件matdll.h文件 #pragma once ...

  3. c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序

    引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...

  4. 教你认识动态链接库DLL文件

    教你认识动态链接库DLL文件   DLL是Dynamic Link Library的缩写,意为动态链接库.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接 ...

  5. 认识动态链接库DLL文件(转一篇文章)

    认识动态链接库DLL文件[url]http://bbs.pcpro.com.cn/viewthread.php?tid=10040[/url] DLL文件即动态链接库文件,是一种可执行文件,它允许程序 ...

  6. c#.net2005 调用evc4.0生成的dll文件

    又好久没有写博客了,这一段时间一直在做东西,碰到了一些问题并解决掉了,所以把它写出来.写程序时碰到的第一个问题就是用c#.net2005 调用evc4.0生成的dll文件. 首先,在调用自己写的dll ...

  7. python 调用golang_python调用golang编写的动态链接库

    楔子 我们都知道python的效率很低,但是好在可以和C语言无缝结合,C语言写好动态链接库之后再让python去调用简直不要太方便.但是使用C编写动态链接库也不是件容易的事情,于是笔者想到了go,go ...

  8. QT调用Saleae C#生成的dll文件

    背景:设计开发PEPS的测试设备时,需要对manchester 等波形采集数据,实际使用时常出现波形解析不准确,设置参数多等原因导致数据采集出现问题.所以冒出个想法是否可以直接使用逻辑分析仪输出的数据 ...

  9. C语言第五篇 python调用C语言写的动态链接库DLL文件

    学习目标:1.学会C语言写windows下的DLL文件.2.用gcc命令将C程序编译成DLL文件.3.学会用python调用C语言写的DLL. 学习内容1:先用C语言写一个简单程序,先建立dll.c文 ...

最新文章

  1. java2实用教程_Java2实用教程(第5版)重要点及遗漏点(二)
  2. oracle SELECT子句中避免使用 ‘ * ‘
  3. 如何在不增加人员的情况下自动化API安全程序
  4. 转载:ROS的QT界面 开发史上 最强教程
  5. sql server2012中使用convert来取得datetime数据类型样式(全)
  6. Ubuntu Server Nginx 下配置 mono 下运行 asp.net mvc
  7. 最全Pycharm教程(6)——将Pycharm作为Vim编辑器使用
  8. 嵌入式成长轨迹36 【Zigbee项目】【单片机基础】【单片机SD卡】
  9. 设计模式在项目中的应用案例_案例|P6软件在水电项目施工管理中的应用
  10. 【深入浅出图像算法】图像处理算法入门好文
  11. 特斯拉开火,状告5名前员工、小鹏汽车、Zoox身陷漩涡
  12. 计算机网络中如何看别人的共享文件夹,教大家如何使用网络共享文件夹和手机如何使用电脑端查看网络共享-共享文件夹...
  13. Asynchronous FIFO with gray code(异步FIFO verilog设计理念)
  14. 【老生谈算法】matlabAP近邻传播聚类算法源码——聚类算法
  15. 教你如何用Unity和Cardboard把3D游戏做成VR游戏
  16. Java学习笔记:Word中创建图表如此简单
  17. java word 颜色设置_如何为Word文档在Java中的背景颜色
  18. Android中Webview显示全屏拉伸图片
  19. Kmeans实现数据聚类
  20. 如果大家关注SOA的事务一致性的处理,那么不妨看看我们是怎么解决的

热门文章

  1. 手动迁移KVM虚拟机
  2. UkrGuru.SqlJson非常适合您的ASP.NET Core Web应用程序!
  3. AI队列长度检测:使用YOLO进行图像中的对象检测
  4. 向.NET Core项目添加EntityFrameworkCore支持
  5. (转)支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos
  6. emacs php 支持,emacs支持golang吗
  7. video 全屏显示
  8. java中identifiers什么意思_javassist.是什么意思
  9. win7查看隐藏文件_Win8系统查看隐藏文件的操作方法是什么?
  10. java安全密钥_Java安全性:密钥大小或默认参数非法?