将反复使用的函数,或者多个项目都会共同调用的模块封装成一个库函数让项目去调用。
动态链接库的优势:
在本文中主要使用vs2022来编写对应的例子
打开vs2022创建新项目,选择动态链接库
创建好动态链接库对应的头文件和cpp文件
#pragma once
#include
#define DLL_EXPORT __declspec(dllexport)
DLL_EXPORT int Add(int m, int n);
DLL_EXPORT int Sub(int m, int n);
class DLL_EXPORT Operation
{
public:
int Value;
public:
int Mul(int m, int n);
int Div(int m, int n);
};
#include "pch.h"
#include "operation.h"
int Add(int m, int n)
{
return m + n;
}
int Sub(int m, int n)
{
return m - n;
}
int Operation::Mul(int m, int n)
{
return m * n;
}
int Operation::Div(int m, int n)
{
return m / n;
}
使用 __declspec(dllexport) 来修饰函数,这个函数能进行导出,其他的程序能进行调用,
使用__declspec(dllexport) 来修饰类,则整个类里面的方法都能进行导出。
创建文件的方法和之前是相同的,具体区别是不需要使用__declspec(dllexport)
#pragma once
int Add2(int m, int n);
int Sub2(int m, int n);
对应的cpp文件
#include "pch.h"
#include "opreation2.h"
int Add2(int m, int n)
{
return m + n;
}
int Sub2(int m, int n)
{
return m - n;
}
关键是要创建对应的def文件
LIBRARY Opreation2.dll
EXPORTS
Add2 @100
Sub2 @101
上面用三种方法创建了导出函数,_declspec(dllexport)修饰函数,_declspec(dllexport)修饰类,在def文件中进行声明
在这个部分中,我们三种导出函数都进行调用,来进行验证
在属性->vc++目录->库目录这里选择 lib文件生成的目录 ,写进去,这样我们的程序才能找到对应的lib文件
在连接器->输入那里,选择我们要调用的lib文件
#include
#include "../Operation/operation.h"
#include "../Opreation2/opreation2.h"
int main()
{
Operation obj_opera;
int val = Add(1, 2);
std::cout << val<< std::endl;
val = Sub(4, 3);
std::cout << val << std::endl;
val = obj_opera.Mul(4, 3);
std::cout << val << std::endl;
val = obj_opera.Div(4, 3);
std::cout << val << std::endl;
val = Add2(1, 2);
std::cout << val << std::endl;
}