论静态链接库和动态链接库
程序员文章站
2022-05-13 09:47:22
...
一.静态链接库
想要生成静态链接库,只需要生成的.lib库文件和该静态链接库的.h头文件即可
.h是用来声明所需要的函数名称参数等
.lib静态库文件包含了源文件
1.首先打开VS,新建Win32控制台应用程序,应用程序类型选择静态库,然后新建了静态链接库项目
2.在源文件文件夹里面添加StaticLib.cpp源文件
在头文件文件夹里面添加StaticLib.h头文件
3.
//StaticLib.cpp
double Add(double a,double b){
return a+b;
}
//StaticLib.h
#pragma once
extern double Add(double a,double b)
4.生成该项目的解决方案得到.lib静态链接库
5.新建另一个Win32项目或者Win32控制台来使用静态链接库
6.使用静态链接库
//Mian.cpp
//使用静态链接库的头文件
#include "StaticLib.h"
//使用静态链接库的库文件
#pragma comment(lib,"StaticLib.lib");
int main(){
double a=Add(1.0,2.0);
...
}
二.动态链接库
动态链接库分为隐式链接和显式链接,并且DllMain这个函数并不是必需的,它可以用来初始化DLL,有点类似构造函数和析构函数
(1).隐式链接
动态链接库的隐式链接其实和静态链接库有点像
想要生成动态链接库的隐式链接,只需要生成的.lib库文件和该动态链接库的.h头文件即可
1.首先打开VS,新建Win32控制台应用程序,应用程序类型选择动态库,然后新建了动态链接库项目
2.在源文件文件夹里面添加DynamicLib.cpp源文件
在头文件文件夹里面添加DynamicLib.h头文件
3.
//DynamicLib.h
#pragma once
extern "C" __declspec(dllexport) int Add(int x,int y); //注意declspec前是两个下划线
//DynamicLib.cpp
#include "DynamicLib.h"
//DLL入口函数,可写可不写
/*
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch(ul_reason_for_call){
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
*/
int Add(int x,int y){
return x+y;
}
4.生成该项目的解决方案得到.lib动态链接库
5.新建另一个Win32项目或者Win32控制台来使用动态链接库的隐式链接
6.使用动态链接库的隐式链接
//Mian.cpp
//使用动态链接库的头文件
#include "DynamicLib.h"
//使用静态链接库的库文件
#pragma comment(lib,"DynamicLib.lib");
int main(){
int a=Add(1,2);
...
}
(2).显式链接