需求:
创建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项目
在下面下创建两个文件夹include
和lib
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动态链接库(傻瓜式教程)