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

cpp 复制代码
#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头文件中声明的函数进行实现

cpp 复制代码
#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

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动态链接库(傻瓜式教程)

相关推荐
Haven-28 分钟前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋35 分钟前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
wjs0401 小时前
Git常用的命令
java·git·gitlab
superlls1 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
田里的水稻2 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
ponnylv2 小时前
深入剖析Spring Boot启动流程
java·开发语言·spring boot·spring
前行的小黑炭2 小时前
Android 协程的使用:结合一个环境噪音检查功能的例子来玩玩
android·java·kotlin
李少兄3 小时前
解决IntelliJ IDEA 提交代码时无复选框问题
java·ide·intellij-idea
cyforkk3 小时前
Spring Boot @RestController 注解详解
java·spring boot·后端
叫我阿柒啊4 小时前
从Java全栈到前端框架:一次真实面试的深度复盘
java·spring boot·typescript·vue·database·testing·microservices