假设外部第三方库为 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总结的更多相关文章

  1. 基于Qt的第三方库和控件

    ====================== 基于Qt的第三方库和控件 ======================     libQxt --------   http://dev.libqxt.o ...

  2. Android JNI如何调用第三方库

    http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...

  3. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  4. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

  5. [置顶] android调用第三方库——第四篇——调用多个第三方库

    0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...

  6. 用NDK调用第三方库

    用NDK调用第三方库遇到不少坑,总结一下. 1.添加JNI目录 参考: http://www.cnblogs.com/lanqie/p/7442668.html 2.文件介绍: 其中:JniFacto ...

  7. android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)

    转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...

  8. android调用第三方库——第一篇 (转载)

    转自:http://blog.csdn.net/jiuyueguang/article/details/9447245 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言: 这两天一直在研 ...

  9. Veins(车载通信仿真框架)入门教程(二)——调用第三方库

    Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...

  10. 【C++】将调用第三方库的代码封装成动态库供上层调用

    需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...

随机推荐

  1. Node.js学习笔记----day02

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.简单实现Apache功能 var http = require('http') var fs = require('fs') // 1. ...

  2. chatGPT vscode 体验

    体验秘钥 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 多人用可能有点卡,重在体验. 自己(中国)想注册账号如下 步骤一:找到入口 搜索Ope ...

  3. drf-序列化器、反序列化、反序列化校验

    1.APIView执行流程 1.之前我们是基于django原生的View编写接口,drf提供给咱们的一个类APIView,以后使用drf写视图类,都是继承这个类及其子类,APIView本身就是继承了D ...

  4. 获取Excel列标

    /// <summary> /// 获取Excel列标 A B C...Z等 /// </summary> /// <param name="col" ...

  5. 无法加载 DLL“*******.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

    无法加载 DLL"Lib\WeWorkFinanceSdk.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 网上查找了一大堆,没找到是什么问题 ...

  6. .Net Core后端架构实战【1-项目分层框架设计】

    摘要:基于.NET Core 7.0WebApi后端架构实战[1-项目结构分层设计]  2023/02/05, ASP.NET Core 7.0, VS2022 引言 从实习到现在回想自己已经入行四年 ...

  7. php pdo如何查询记录条数

    转载php中文网:https://www.php.cn/php-ask-457710.html php pdo查询记录条数的方法:1.使用fetchAll函数查询,其语法如"$rows=$q ...

  8. 2020-6-2 map?

      问题描述 试题编号: 202006-2 试题名称: 稀疏向量 时间限制: 2.0s 内存限制: 512.0MB 问题描述:     #include<stdio.h>//数据量很大,所 ...

  9. Idea External Libraries 没有导入依赖

    Maven 下面是有依赖的,但是 Idea 的 External Libraries 没有导入进来,就非常奇怪,这个现象我在 Android Studio 也遇到过,要么找到 Maven 仓库,手动把 ...

  10. Spring AOP 报错:Error creating bean with name 'student' defined in file

    问题概述 Spring AOP 报错,一直显示:Error creating bean with name 'student' defined in file 的报错.从五个方向排查:第一,aspec ...