Visual Studio 2022创建dll并调用

需求:
创建A项目,有函数和类,将A项目生成DLL动态链接库
创建B项目,使用A项目生成的dll和lib相关文件

正常项目开发.h用于函数声明,.cpp用于函数实现,但是项目开发往往不喜欢将.cpp函数实现的代码发给别人,就可以生成.dll.lib,让用户进行使用,从而屏蔽掉了相关函数的实现.cpp文件

一、创建——生成DLL新项目

在这里插入图片描述
模板选用C++空项目
在这里插入图片描述
随便起个名称,这里项目名称为test_dll

在这里插入图片描述SDK选用Release x64在这里插入图片描述
创建头文件
在这里插入图片描述
这里是test_dll.h
在这里插入图片描述

#pragma once#ifndef TEST_DLL
#define TEST_DLL//宏定义导出
#ifdef TEST_DLL__
#define TEST_DLL __declspec(dllexport) // 导出
#else
#define TEST_DLL __declspec(dllimport) // 导入
#endif// 导出函数
TEST_DLL int add(int a, int b);
TEST_DLL int sub(int a, int b);
TEST_DLL int mul(int a, int b);// 导出类
class TEST_DLL Animal 
{
public:void run();void call();
};// 以C语言方式导出函数
extern "C"
{TEST_DLL int Cadd(int a, int b);TEST_DLL int Csub(int a, int b);TEST_DLL int Cmul(int a, int b);
}#endif // !TEST_DLL

创建对应的.cpp文件
在这里插入图片描述
这里是test_dll.cpp,用于对test_dll.h头文件中声明的函数进行实现
在这里插入图片描述

#include "test_dll.h"
#include <iostream>int ADD(int a,int b) 
{int c = a + b;return c;
}int SUB(int a, int b) 
{if (a >= b)return a - b;else return b - a;
}void Animal::RUN()
{std::cout << "Animal is run!!!" << std::endl;
}void Animal::CALL() 
{std::cout << "Animal is call!!!" << std::endl;
}int Cmax(int a, int b) 
{if (a >= b) return a;else return b;
}int Csub(int a, int b)
{if (a > b)return a - b;else return b - a;
}int Cmul(int a,int b) 
{return a * b;
}

二、配置——生成DLL项目

右击 项目属性
在这里插入图片描述
配置类型选择动态库(.dll),SDK我选择的是Release x64
将来导入DLL的时候也是Release x64下才可以导入
在这里插入图片描述
右击 解决方案 生成解决方案
快捷键:Ctrl + Shift + B
在这里插入图片描述
在这里插入图片描述
在项目的x64/Release下有2个文件就是需要的文件,一个是test_dll.dll,另一个是test_dll.lib
在这里插入图片描述
还需的第三个文件是编写的test_dll.h
在这里插入图片描述

小结:
需要用到三个文件
1,项目下的x64/Release下的test_dll.dll
2,项目下的x64/Release下的test_dll.lib
3,项目下的test_dll.h

就此DLL已经生成,接下来开始使用上述的三个文件

三、创建——使用DLL项目

新建一个项目
在这里插入图片描述
同样选择C++ 空项目
在这里插入图片描述
我这里项目名称为:use_dll
在这里插入图片描述
切换SDK为Release x64
在这里插入图片描述

四、配置——使用DLL项目

在下面下创建两个文件夹includelib
在这里插入图片描述
include下存放.h文件
lib下存放.dll和.lib文件
当前项目下再次添加.dll文件
在这里插入图片描述

右击 项目 选择属性
在这里插入图片描述
VC++目录下
包含目录:选到include文件夹
库目录:选到lib文件夹
在这里插入图片描述
链接器下
附加依赖项:添加生成的.lib文件名称
在这里插入图片描述

五、测试使用DLL

创建一个demo.cpp来导入dll进行测试
在这里插入图片描述
这里创建了一个demo.cpp
在这里插入图片描述

#include <test_dll.h>
#include <iostream>int main(int argc, char* argv[])
{std::cout << ADD(5, 22) << std::endl;std::cout << SUB(22, 10) << std::endl;std::cout << Cmax(99, 20) << std::endl;std::cout << Cmul(10,5) << std::endl;Animal animal;animal.RUN();animal.CALL();return 0;
}

在这里插入图片描述

参考博文:
VS2019-C++创建和调用DLL动态链接库(傻瓜式教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 认证模拟题 - 5

一、题目 .在集群上有一个索引 food_ingredient&#xff0c;搜索需要满足以下要求&#xff1a; 三个字段 manufacturer&#xff0c;name&#xff0c;brand 都能匹配到文本 cake mix高亮 字段 name&#xff0c;并加标签排序&#xff0c;对字段 brand 正序&#xff0c;_score 降…

Docker安装Redis(云服务器)

准备&#xff1a; 在云服务器中开启6370端口号 docker run -d --name redis -p 6379:6379 redis 这条命令使用docker运行一个名为"redis"的容器&#xff0c;映射容器的6379端口到主机的6379端口&#xff0c;并且使用redis镜像来运行容器。REDIS是一个开源的内存数据…

2024最新群智能优化算法:大甘蔗鼠算法(Greater Cane Rat Algorithm,GCRA)求解23个函数,提供MATLAB代码

一、大甘蔗鼠算法 大甘蔗鼠算法&#xff08;Greater Cane Rat Algorithm&#xff0c;GCRA&#xff09;由Jeffrey O. Agushaka等人于2024年提出&#xff0c;该算法模拟大甘蔗鼠的智能觅食行为。 参考文献 [1]Agushaka J O, Ezugwu A E, Saha A K, et al. Greater Cane Rat Alg…

C++ 混合运算的类型转换

一 混合运算和隐式转换 257 整型2 浮点5 行吗&#xff1f;成吗&#xff1f;中不中&#xff1f; C 中允许相关的数据类型进行混合运算。 相关类型。 尽管在程序中的数据类型不同&#xff0c;但逻辑上进行这种运算是合理的相关类型在混合运算时会自动进行类型转换&#xff0c;再…

2024Dragon Knight CTF复现web

穿梭隐藏的密钥 首先看看页面的源代码&#xff0c;但是发现f12和鼠标右键都被禁用了 用ctrlu查看&#xff0c;发现一个可疑页面 访问看看&#xff0c;发现还是只有一张图&#xff0c;查看源代码发现提示 扩展&#xff1a; Fuzz&#xff1a;Fuzz是一种基于黑盒的自动化软件模糊…

TXT文档拆分、合并、添加内容,修改内容、删除内容——首助编辑高手软件一招解决

下面这个TXT文档里面是一篇长篇小说&#xff0c;大家都知道一般小说文字内容是比较大的一个文件呢&#xff0c;想要拆分&#xff0c;拆分肯定是有方法呢&#xff0c;比如比较重统的方法手动一章一章复制出来&#xff0c;粘贴到另一个文档里面去粘贴&#xff0c;手动操作是不是很…

【GlobalMapper精品教程】083:基于DEM整体抬升或下降地形高程的两种方式

在Globalmapper24中文版中,可以很方便地对DEM高程数据进行整体抬升或下降。 文章目录 一、准备DEM数据二、高程整体修改1. 修改偏移2. 数据导出三、栅格计算器一、准备DEM数据 订阅专栏后,从私信查收实验数据及Globalmapper24中文版,加载实验数据包data083.rar中的dem数据,…

数据结构:希尔排序

文章目录 前言一、排序的概念及其运用二、常见排序算法的实现 1.插入排序2.希尔排序总结 前言 排序在生活中有许多实际的运用。以下是一些例子&#xff1a; 购物清单&#xff1a;当我们去超市购物时&#xff0c;通常会列出一份购物清单。将购物清单按照需要购买的顺序排序&…

[ROS 系列学习教程] 建模与仿真 - Xacro 语法

ROS 系列学习教程(总目录) 本文目录 一、属性与属性块二、数学表达式三、宏3.1 宏的基本使用3.2 属性块做为宏的入参3.3 任意数量元素做为宏的入参3.4 指定多个块元素的处理顺序3.5 宏嵌套3.6 默认参数3.7 局部属性 四、Rospack 命令五、包含其他 xacro 文件六、条件语句七、YA…

机器人动力学模型与MATLAB仿真

机器人刚体动力学由以下方程控制&#xff01;&#xff01;&#xff01; startup_rvc mdl_puma560 p560.dyn 提前计算出来这些“disturbance”&#xff0c;然后在控制环路中将它“抵消”&#xff08;有时候也叫前馈控制&#xff09; 求出所需要的力矩&#xff0c;其中M项代表克服…

世界500强是如何解决邮件大附件影响业务问题的

电子邮件已成为众多企业沟通和文件传输的重要工具。然而&#xff0c;邮件发送大附件时&#xff0c;企业往往会遇到一系列挑战。本文将探讨邮件发送大附件的优劣势&#xff0c;分析其对业务可能造成的问题&#xff0c;并介绍500强企业是如何解决这些问题的。 邮件发送大附件的优…

V90 PN总线伺服通过FB285速度控制实现正弦位置轨迹运动(解析法和数值法对比测试)

V90总线伺服相关内容请参考专栏系列文章,这里不在详述 1、V90伺服PN总线速度随动控制 V90伺服PN总线速度随动控制(手摇轮功能)_手摇轮可以接总线plc吗?-CSDN博客文章浏览阅读632次。V90PN总线控制相关内容,请参考下面文章链接:博途1200/1500PLC V90 PN通信控制 (FB284功能…

Facebook的算法揭秘:如何塑造我们的信息

在当今数字化时代&#xff0c;Facebook已经成为人们日常生活中不可或缺的一部分。其信息流算法不仅决定着我们在平台上看到的内容&#xff0c;还对我们的观点、行为和体验产生了深远的影响。本文将深入探讨Facebook的算法运作方式&#xff0c;以及它对我们信息获取和社交行为的…

Java集合【超详细】2 -- Map、可变参数、Collections类

文章目录 一、Map集合1.1 Map集合概述和特点【理解】1.2 Map集合的基本功能【应用】1.3 Map集合的获取功能【应用】1.4 Map集合的两种遍历方式 二、HashMap集合2.1 HashMap集合概述和特点【理解】2.2 HashMap的组成、构造函数2.3 put、查找方法2.4 HashMap集合应用案例【应用】…

【c++入门】函数重载,引用,内联函数,auto

函数重载 函数重载概念 什么是函数重载&#xff1f; 函数重载&#xff1a;是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同&#xff0c;常用来处理实现功能类似数据类…

pytorch学习day3

一、模型创建&#xff08;Module&#xff09; 网络创建流程 ​ 上面的图表展示了使用PyTorch创建神经网络模型的主要步骤。每个步骤按顺序连接&#xff0c;展示了从导入必要的库到最终测试模型的整个流程&#xff1a; 导入必要的库&#xff1a;首先导入PyTorch及其相关模块。定…

【Tlias智能学习辅助系统】03 部门管理 前后端联调

Tlias智能学习辅助系统 03 部门管理 前后端联调 前端环境 前端环境 链接&#xff1a;https://pan.quark.cn/s/8720156ed6bf 提取码&#xff1a;aGeR 解压后放在一个不包含中文的文件夹下&#xff0c;双击 nginx.exe 启动服务 跨域的问题已经被nginx代理转发了&#xff0c;所以…

vs code 中使用SSH 连接远程的Ubuntu系统

如下图&#xff0c;找到对应的位置 在电脑上找到以下位置 打开配置如下&#xff0c;记住&#xff0c;那个root为你的用户名&#xff0c;这个用户名&#xff0c;具体根据你的用户名来设置&#xff0c;对应的密码就是你登录Ubuntu时的密码 Host root192.168.0.64User rootHostNa…

第N3周:Pytorch文本分类入门

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 这里借用K同学的一张图片大致说明本次任务流程。 1.本次所用AG News数据集介绍 AG…

汽车IVI中控开发入门及进阶(二十三):i.MX8

前言: IVI市场的复杂性急剧增加,而TimeToMarket在几代产品中从5年减少到2-3年。Tier1正在接近开放系统的模型(用户可以安装应用程序),从专有/关闭源代码到标准接口/开放源代码,从软件堆栈对系统体系结构/应用层/系统验证和鉴定的完全所有权,越来越依赖第三方中间件和平…