VS2022中创建C++SDK库(dll动态库)并调用SDK库(dll动态库)

news/2024/11/27 19:50:45/

VS2022中创建C++SDK库(dll动态库)并调用SDK库(dll动态库)

一、说明

通过前两篇的文章我们知道了封装一个Qt下的SDK库(dll动态链接库)和封装Pimpl模式。

Qt创建SDK库(dll动态库)并调用SDK库(dll动态库)

SDK(动态链接库dll)的封装技巧

本篇介绍在C++ VS下封装一个SDK库(动态链接库dll)

二、环境介绍

操作系统:windows 10 64位

VS:vs2022 64位

开发语言:C++

三、创建步骤

1、打开vs2022,创建新项目

 2、选择DLL(通用Windows)

 3、命名我们的动态库

会弹出选择最低和最高的平台版本:

 创建完成后,就如下所示:

如果需要使用其他的库,比如Eigen库,把Eigen库放到工程.sln文件所在文件夹内,在项目属性C/C++->常规->附加包含目录中添加Eigen所在目录路径即可。

在项目名称中,在exampleVSDLL.h添加一个类Calculation:

#pragma once#ifdef DLL_CALCULATION
#define DLL_CALCULATION _declspec(dllexport)
#else
#define DLL_CALCULATION _declspec(dllimport)
#endifclass DLL_CALCULATION Calculation{
public:Calculation();int add(int a, int b);int subtract(int a, int b);int multiply(int a, int b);int divide(int a, int b);};

在exampleVSDLL.cpp中添加:

#include "pch.h"
#include "exampleVSDLL.h"Calculation::Calculation()
{
}int Calculation::add(int a, int b)
{return ( a + b );
}int Calculation::subtract(int a, int b)
{return ( a - b );
}int Calculation::multiply(int a, int b)
{return ( a * b );
}int Calculation::divide(int a, int b)
{return ( a / b );
}

在C/C++ 预处理器->预处理器定义,添加:

_CRT_SECURE_NO_DEPRECATE

DLL_CALCULATION

_CRT_SECURE_NO_DEPRECATE(不提示_s的函数,如strcpy_s,等的非安全版本的警告

DLL_CALCULATION用于区分引用该头文件的源文件需要导入dll还是导出dll,由此决定加在函数声明之前的宏定义 DLL_CALCULATION为导入命令还是导出命令

点击编译,即可在Release或Debug目录下看到生成的dll文件和lib文件。

三、dll的调用

1、创建一个C++控制台项目

 2、把上一步生成的exampleVSDLL.h、exampleVSDLL.dll和exampleVSDLL.lib文件拷贝到main函数所在的同一文件夹内。

3、在项目属性页:C/C++->常规->附加包含目录,添加exampleVSDLL.h头文件所在目录的路径;

 4、在项目属性页:链接器->常规->附加库目录,中添加依赖库所在目录路径,多个目录的以分号分隔。

  5、在项目属性页:链接器->输入->附加依赖项,中添加exampleVSDLL.lib。

 6、在main函数内写上调用函数就可以了。

#include <iostream>
#include "exampleVSDLL.h"using namespace std;int main()
{cout << "test call dll" << endl;Calculation calculation;int a = 10;int b = 5;cout<<"a + b = "<<calculation.add(a, b)<<endl;return 0;
}

上一篇:SDK(动态链接库dll)的封装技巧

下一篇:

本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。


http://www.ppmy.cn/news/48852.html

相关文章

涨点神器:基于Yolov8小目标遮挡物性能提升(SEAM、MultiSEAM)

1.遮挡物检测简介 不同的目标检测应用场景有不同的检测难点,小目标、多尺度以及背景复杂等问题,被遮挡的物体仍然是最先进的物体检测器面临的挑战。本文尝试解决待测目标相互遮挡带来的检测困难,对于人脸遮挡提出了一个名为 SEAM 的注意力模块并引入了排斥损失来解决它,引…

Failed to resolve: com.github.adrielcafe:ffmpeg-android-java:2a627f6ecd

背景 项目中有引用 AndroidAudioConverter&#xff0c;引入方式&#xff1a; implementation com.github.adrielcafe:AndroidAudioConverter:0.0.8 gradle同步及编译代码都会报错&#xff1a; Failed to resolve: com.github.adrielcafe:ffmpeg-android-java:2a627f6ecd 原…

mysql索引失效的坑

目录 前言 博客文章分享 对索引字段做函数操作 隐式类型转换 隐式字符编码转换 原因分析 解决方法&#xff1a; 前言 在MySQL中&#xff0c;有时候会因为语句使用不当导致sql不走索引&#xff0c;从而使数据库的压力变大。本篇分享一下sql不走索引的坑&#xff0c;让大家…

SCUACM2023集训前训练-基础算法

文章目录 A-最长公共子序列转最长上升子序列模板题B-单调栈贪心&#xff0c;好题单调栈贪心神犇代码赏析 C-Atcoder_abc294_f-二分答案D-set或树状数组 A-最长公共子序列转最长上升子序列模板题 传送门 模板题我就不写了。 本文juejin&#xff1a;https://juejin.cn/post/72…

2023自助洗车店系统解决方案共享洗车无人洗车风口

2021年中国汽车保有量预计超6.3亿辆,洗车市场需求巨大,传统洗车投资大、费用贵、成本高耗水大、占地面积大,而自助洗车机占据传统洗车耗水量1/4 ,占地面积1/70 ;节能环保得到政府的大力支持,且结合信息物联技术,实现智能化管理,高效能运营,灵活便捷服务,符合智慧城市发展原则,成…

提高硬件设计能力的学习路线

不懂硬件的人&#xff0c;会觉得硬件高深莫测&#xff0c;“为什么他改几个电阻、电容就调出来&#xff0c;我弄个半天没搞定&#xff1f;”&#xff0c;“噢&#xff0c;靠的是经验”&#xff0c;但是经验又是什么呢&#xff1f;不能形容&#xff0c;反正就是不明觉厉。 就是…

36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?

为了找到工作&#xff0c;你愿意接受降薪多少&#xff1f; 一位36岁的杭州程序员问&#xff1a; 36岁被裁&#xff0c;找了2个月工作&#xff0c;年包从100万降到50万&#xff0c;真心纠结&#xff0c;要不要接&#xff1f; 网友们分成了旗帜鲜明的两派&#xff0c;一派人认为不…

Node 07-nvm

nvm 介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具&#xff0c;方便切换不同版本的Node.js 使用 nvm 的使用非常的简单&#xff0c;跟 npm 的使用方法类似 下载安装 首先先下载 nvm&#xff0c;下载地址 https://github.com/coreybutler/nvm-…