C89:论静态链接库和动态链接库

本文详细介绍了在Visual Studio中创建和使用静态链接库(.lib)及动态链接库(.dll)的方法,包括隐式链接和显式链接的区别,以及如何在项目中正确引入和调用这些库。

一.静态链接库

想要生成静态链接库,只需要生成的.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).显式链接

 

转载于:https://www.cnblogs.com/k5bg/p/11136761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值