VS/QT--调用第三方库dll总结
假设外部第三方库为 test.h,test.lib,test.dll,
调用的函数是 int fnTest(int param);
一、VS中的静态调用和动态调用
1.1 静态调用
静态调用需要用到第三方的文件:.h .dll .lib
静态调用跟使用本项目内的函数差不多,区别的一点在于本项目内的函数要在被调用之前声明,静态调用需要把第三方的头文件(.h)和lib文件导入到项目中。
导入第三方库的方法有2种:
①.在使用第三方库的文件中加入
#include "test.h"
#pragma comment(lib,"test.lib")/*根据.h和.lib存放的路径设置*/
//调用时直接使用fnTest函数即可;
int result = fnTest(4);
②.在项目-属性中设置
添加头文件:在属性界面,C++->常规->附加包含目录中加入头文件 test.h;
添加lib文件,在属性界面,链接器->常规->附加库目录中加入lib文件所在的目录 链接器->输入->附加依赖项中加入lib文件 test.lib;
注意上述的分号不要省略。
调用时直接使用fnTest函数即可;
int result = fnTest(4);
1.2 动态调用
当只有.dll文件时,可以采用动态调用;动态调用步骤如下:
//1.定义一个指针函数 typedef void(*fun)
typedef int(*funcTest)(int);
//2.定义一个句柄,获取dll的地址
HINSTANCE hDLL = LoadLibrary("test.dll");
if(nullptr == hDLL)
{
string s = "can not find dll";
throw std::exception(s.c_str());
}
//3.定义一个函数指针获取函数地址
funcTest test = (funcTest)GetProcAddress(hDLL,"fnTest");
if(nullptr == test)
{
string s = "can not find function:fnTest";
throw std::exception(s.c_str());
}
//4.通过定义的函数指针调用函数
int iResult = test(5);
//最后一定要记得释放句柄,上述2,3,4步骤如果失败也要释放句柄
FreeLibrary(hDLL);
二、QT中的显式调用和隐式调用
2.1 隐式调用
QT的隐式调用与C++静态调用相似,两种方法
①.与C++静态调用方式相同;
②.在.pro文件空白位置单击右键,添加库
在库类型中选择"外部库",下一步,选择对应的库文件,平台和链接根据需要选择,下一步,完成.
然后再进行①操作.
2.2 显示调用
QT提供QLibrary类显式调用外部工具,具体步骤如下:
//1.定义一个指针函数 typedef void(*fun)
typedef int(*funcTest)(int);
//2.定义一个QLibrary类,加载dll
QLibrary qlibDLL("test.dll);
if(!qlibDLL.load())//加载dll
{
string s = "can not find dll";
throw std::exception(s.c_str());
}
//3.定义一个函数指针获取函数地址
funcTest test = (funcTest)qlibDLL.resolve("fnTest");
if(nullptr == test)
{
string s = "can not find function:fnTest";
throw std::exception(s.c_str());
}
//4.通过定义的函数指针调用函数
int iResult = test(5);
//5.释放内存
qlibDLL.unload();
VS/QT--调用第三方库dll总结的更多相关文章
- 基于Qt的第三方库和控件
====================== 基于Qt的第三方库和控件 ====================== libQxt -------- http://dev.libqxt.o ...
- Android JNI如何调用第三方库
http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
- [置顶] android调用第三方库——第四篇——调用多个第三方库
0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...
- 用NDK调用第三方库
用NDK调用第三方库遇到不少坑,总结一下. 1.添加JNI目录 参考: http://www.cnblogs.com/lanqie/p/7442668.html 2.文件介绍: 其中:JniFacto ...
- android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...
- android调用第三方库——第一篇 (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9447245 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言: 这两天一直在研 ...
- Veins(车载通信仿真框架)入门教程(二)——调用第三方库
Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...
- 【C++】将调用第三方库的代码封装成动态库供上层调用
需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...
随机推荐
- Quartz.Net源码Example之Quartz.Examples
Quartz.Examples 反射-Example批量执行 实现思路:定义一个统一的接口,需要实现的类全部实现该接口:通过反射获取实现该接口的实例并触发其中的方法. 定义统一的接口 // 所有要 ...
- 真正“搞”懂HTTPS协议15之安全的定义
前面我们花了很大的篇幅来讲HTTP在性能上的改进,从1.0到1.1,再到2.0.3.0,HTTP通过替换底层协议,解决了一直阻塞性能提升的队头阻塞问题,在性能上达到了极致. 那么,接下来,我们来聊一聊 ...
- 快速上手Java开发工具Eclipse之简易手册
Eclipse下载,可以下载最新版本,文档是以2020-12R版本为例 http://www.eclipse.org/downloads/ 下载Packages即可 安装Eclipse 解压安装 除了 ...
- JZOJ 3736. 【NOI2014模拟7.11】数学题
\(\text{Problem}\) 给出向量 \(\boldsymbol a = (x1,y1), \boldsymbol b = (x2,y2)\) 求 \(|\lambda_1\boldsymb ...
- JZOJ 3571. 【GDKOI2014】内存分配
解析 也就是说建一棵权值线段树维护这些信息.要注意的是每次的最优解必然是 \(b\) 小的先做,故离线排序确定离散后的下标再依次求解 \(Code\) #include<cstdio> # ...
- PDO使用返回结果集的方法输出数据库里面的单个值
1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 /* 通过调用驱动程序创建一个PDO实例 */ 4 $dsn = 'my ...
- honoka和格点三角形
题目: honoka最近在研究三角形计数问题.她认为,满足以下三个条件的三角形是"好三角形".1.三角形的三个顶点均为格点,即横坐标和纵坐标均为整数.2.三角形的面积为 .3.三角 ...
- Openfoam UPstream类探索
前言 上篇文章我们大体捋顺了Pstream类,但上篇没有讲到的是Pstream类很多东西是从UPstream类继承来的 这次我们大体看一下UPstream类,以避免Pstream类内很多继承来的东西不 ...
- vue ie11 缺少 ':' html
IE11 用vue 出现这错 怎么处理啊 ,用的html页做的 ,没用脚手架这类的东西 vue本身在没有babel做降级的情况下没法在IE上跑的,配个babel,还有polyfill这两个加上就好了 ...
- 关于HTML5中Video标签播放问题
PS:官网首页视频IOS与安卓都可播放代码: <video width="100%" height="auto" type="video/mp4 ...