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.rhkb.cn/news/342964.html

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

相关文章

30天收入500万美金!揭秘超休闲手游《Royal Match》吸金秘诀!

据AppMagic发布的收入榜中&#xff0c;超休闲手游《Royal Match》成绩斐然&#xff0c;不仅在三消赛道排名第一&#xff0c;更是冲上了应用畅销榜第四名&#xff0c;30天内增收超500万美元&#xff01; 来源&#xff1a;AppMagic 6月畅销榜 三消解谜&#xff0c;作为全球范围内…

新品发布 | 飞凌嵌入式RK3562J核心板,智能工业时代的国产智慧引擎

飞凌嵌入式推出FET3562J-C全国产核心板&#xff0c;专为工业自动化及消费类电子设备设计&#xff0c;打造智能工业时代的国产智慧新引擎。 FET3562J-C核心板基于Rockchip RK3562J处理器开发设计&#xff0c;该处理器采用22nm先进制程工艺&#xff0c;集成了4个ARM Cortex-A53高…

如何调用地方天地图?

我们在《如何申请自己的专属天地图&#xff1f;》一文中&#xff0c;为大家分享了如果申请专属天地图&#xff0c;并在水经微图&#xff08;以下简称“微图”&#xff09;中加载的具体方法。 于是&#xff0c;就有朋友问如何调地方用天地图。 现在&#xff0c;我们就以四川地…

【重磅开源】MapleBoot权限控制使用介绍(菜单权限、按钮权限、数据权限)

基于SpringBootVue3开发的轻量级快速开发脚手架 ## &#x1f341;项目简介 一个通用的前、后端项目模板 一个快速开发管理系统的项目 一个可以生成SpringBootVue代码的项目 一个持续迭代的开源项目 一个程序员的心血合集 度过严寒&#xff0c;终有春日&#…

蓝桥杯物联网竞赛_STM32L071_19_输出方波信号(PWM)

国赛考了一个方波&#xff0c;第一次考这个&#xff0c;连个示波器都没有 CUBMX配置&#xff1a; 按上述配置刚好是32MHZ / 32 / 100 10KHZ 理论&#xff1a; 频率&#xff1a;就是一秒钟能产生多少个脉冲&#xff0c;如下图: 这算是一个脉冲&#xff0c;1KHZ说明一秒钟产生…

Facechain系列: constants.py文件解读

在根目录下还有个facechain目录&#xff0c;其中的constants.py文件中定义了代码控制的重要参数。 1.姿态控制 在应用代码进行推理&#xff08;见这里Facechain系列: 通过代码进行推理&#xff09;中&#xff0c;如果将以下代码 use_pose_model False 修改为 use_pose_mo…

hot100_62不同路径

不同路径 题目思路、代码1.排列组合2.动态规划 题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff0…

ubuntu-server(22.04)安装

准备工作 首先我们先从网上获取ubuntu的iso镜像文件 Index of /ubuntu-releases/22.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我们安装这个最小包即可 找到我们ubuntu安装完成后所需要下载安装源的网址&#xff08;常用是阿里云&#xff09; ubuntu安装…

TPM仿真环境搭建

文章目录 背景及注意事项一、CMake二、m4三、GNU MP Library四、TPM_Emulator五、TSS协议栈&#xff08;trousers-0.3.14.tar.gz&#xff09;六、 tpm-tools七、查看是否安装成功八、测试 TPM环境&#xff08;需要开三个终端分别运行&#xff09;8.1 启动TPM &#xff08;第一个…

SpringBootWeb 篇-深入了解 AOP 面向切面编程与 AOP 记录操作日志案例

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 AOP 概述 1.1 构造简单 AOP 类 2.0 AOP 核心概念 2.1 AOP 执行流程 3.0 AOP 通知类型 4.0 AOP 通知顺序 4.1 默认按照切面类的类名字母排序 4.2 用 Order(数字) 注…

Java 还能不能继续搞了?

金三银四招聘季已落幕&#xff0c;虽说行情不是很乐观&#xff0c;但真正的强者从不抱怨。 在此期间&#xff0c;我收到众多小伙伴的宝贵反馈&#xff0c;整理出132道面试题&#xff0c;从基础到高级&#xff0c;有八股文&#xff0c;也有对某个知识点的深度解析。包括以下几部…

CC++内存管理【new和delete操作符的详细分析】【常见面试题】

C/C内存管理 1.C/C内存分布 我们先来看一段代码&#xff0c;来了解一下C/C中的数据内存分布。 # include <stdlib.h>int globalVar 1; static int staticGlobalVar 1; // 比globalVar还要先销毁,同一个文件下后定义的先析构 // 全局变量存在 数据段&#xff08;静态…

《尚庭公寓》项目部署之Docker + Nginx

docker rmi nginx docker pull nginx docker rm -f nginx #先创建一个简易的nginx容器&#xff08;后面会删&#xff09;&#xff0c;然后通过 docker cp命令把容器里面的nginx配置反向拷贝到宿主主机上。 docker run --name nginx -p 80:80 -d nginx# 将容器nginx.conf文件复…

【Linux】ip命令详解

Linux网络排查 目录 一、ip命令介绍 1.1 ip命令简介 1.2 ip命令的由来 二、ip命令使用帮助 2.1 ip命令的help帮助信息 2.2 ip命令对象介绍 2.3 ip命令选项介绍 三、查看网络信息 3.1 显示当前网络接口信息 3.2 显示网络设备运行状态 3.3 显示详细设备信息 3.4 查看…

“新夏入汉城,昂首度良辰”—Anzo Capital燃动武汉交易技术峰会

“2024年武汉交易技术峰会”在中国湖北武汉举办。Anzo Capital昂首资本作为2024年交易峰会的独家赞助商出席本次活动&#xff0c;Anzo Capital燃动现场&#xff0c;尽展昂扬奋进之姿。 活动现场&#xff0c; Anzo Capital昂首资本凭借无与伦比的交易环境、专业优质的服务、丰富…

【Python Cookbook】S01E21 文本模式的匹配和查找 match()、search()、findall() 以及 捕获组和 + 的含义

目录 问题解决方案讨论 问题 本文讨论一些按照特定的文本模式进行的查找和匹配。 解决方案 如果想要匹配的只是简单文字&#xff0c;通常我们使用一些内置的基本字符串方法即可&#xff0c;如&#xff1a;str.find()&#xff0c;str.startwith()&#xff0c;str.endswith() …

css 前端面试题学习思维导图学习笔记

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“前端面试题学习笔记”。 一、面试题内容 1.link 和 import的区别 注意&#xff1a;在前端开发中&#xff0c;主要使用的是link,用import的比较少&#xff0c;只有在vue中会用到后者&#xff0c;尤其是加载顺序…

供应链管理怎么做?一文搞懂供应链数字化转型方案

供应链管理不仅关系到产品从原材料到成品&#xff0c;再到最终用户的整个流程&#xff0c;更是企业运营效率、成本控制和市场响应速度的重要体现。然而&#xff0c;在现代商业环境下&#xff0c;传统的供应链管理方式往往存在库存管理困难、协作效率低、结构不灵活等问题&#…

【机器学习】AI大模型的探索—分析ChatGPT及其工作原理

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4da;介绍ChatGPT 1.1 什么是ChatGPT 1.2 ChatGPT的应用场景 &#x1f4a1;基础概念 1. 人工智能和机器学习 1.1 人工智能&#xff08;AI&#xff09;简介 1.2 机器学习&#xff08;ML&#xff09;简…

【语音告警】Zabbix语音播报-报警媒介部分配置-语音报警灯|声光报警器|网络信号灯

阅读说明 本文为博灵语音通知终端与Zabbix报警媒介的配置&#xff0c;对接完成后可以实现Zabbix的声光语音告警&#xff0c;播报效果可以参考 Modbus-博灵语音通知终端与PLC联动告警介绍 对接前需配置好通知终端的IP地址&#xff0c;设备参数参见 其他完整的Zabbix语音播报报…