Visual Studio 2022创建dll并调用

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

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项目

在下面下创建两个文件夹include和lib include下存放.h文件 lib下存放.dll和.lib文件 当前项目下再次添加.dll文件

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

五、测试使用DLL

创建一个demo.cpp来导入dll进行测试 这里创建了一个demo.cpp

#include

#include

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

相关推荐

《FF14军票速刷攻略:7.0版本高效刷票方法》
百特365下载

《FF14军票速刷攻略:7.0版本高效刷票方法》

📅 07-02 👁️ 2008
小米5x如何连接电脑?连接方法详解
日博365投注

小米5x如何连接电脑?连接方法详解

📅 06-29 👁️ 4450
小米5x如何连接电脑?连接方法详解
日博365投注

小米5x如何连接电脑?连接方法详解

📅 06-29 👁️ 4450
原创图解:为什么说“羽之神勇,千古无二”?项羽到底有多强?
晊的意思,晊的解释,晊的拼音,晊的部首,晊的笔顺
青云志 (2016年电视剧)
365bet赌场手机投注

青云志 (2016年电视剧)

📅 07-03 👁️ 6747
黑暗之魂3被禁原因:这款日本游戏何以遭受限制?
365bet赌场手机投注

黑暗之魂3被禁原因:这款日本游戏何以遭受限制?

📅 07-01 👁️ 9595
柳叶像什么比喻句大全简单的
百特365下载

柳叶像什么比喻句大全简单的

📅 07-03 👁️ 1815
苹果手机屏保时间怎么设置
日博365投注

苹果手机屏保时间怎么设置

📅 07-02 👁️ 7025