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创建一个动态库的项目,会 ...
随机推荐
- Objects非空判断-声明异常throws
Objects非空判断 还记得我们学习过一个类Objects吗,曾经提到过它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant (容忍空指针的),那么在 ...
- Linux环境下:程序的链接, 装载和库[静态链接]
看以下例子 main.c extern int x; int main() { int y = 100; swap(&x,&y); return 0; } int x = 1; voi ...
- drf入门规范、序列化器组件、视图组件、请求与响应
DRF框架之入门规范 本篇文章会详细介绍web开发模式.API接口及其接口测试工具.restful规范.还有经常分不清又很重要的序列化与反序列化的部分,初级交接触APIView.Request类. ...
- 12月8日内容总结——Django推导流程,Django模块的下载和基本使用、Django的应用和目录结构讲解、Django三板斧
目录 一.纯手撸web框架 二.基于wsgiref模块 三.代码封装优化 四.动静态网页 五.jinja2模块 六.前端.后端.数据库三者联动 七.python主流web框架 八.django简介 1 ...
- DataGrid 设置某列可见或只读
在ASP.NET中使用 DataGrid数据展示控件时,可以对数据进行展示,编辑,删除,在有些时候不希望某列被修改,进行如下设置 点击编辑后 想要如下效果 其中权限编码和权限分类不希望修改 设置方法 ...
- 如何快速搭建 Maven私服Nexus【实践可行版】
搭建私服Nexus Nexus 一般用来搭建位于组织或公司内部的 Maven 私服,代理所有的仓库(包括中央仓库),用户通过它就可以获取和管理所有所需的 Maven 构件. Nexus 开源版具有以下 ...
- day12-SpringMVC文件上传
SpringMVC文件上传 1.基本介绍 SpringMVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.spring 用 Jacarta Com ...
- Technique to Read Source Code
Technique to Read Source Code Excerpted from http://ruby-hacking-guide.github.io/intro.htm Any progr ...
- (原创)【B4A】一步一步入门05:控件、公有属性、水平锚定、垂直锚定(控件篇01)
一.前言 前面的教程,已经完整讲述了用B4A开发安卓APP从新建项目到编译发布的完整流程.从本篇开始,我们将会从B4A的细节处着手,一步一步掌握B4A. 从本篇开始的子系列为"控件篇&quo ...
- PostGIS之几何有效性
1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...