静态链接库和动态链接库

本文介绍了静态链接库和动态链接库的使用方法。对于静态链接库,详细讲解了方式1和方式2的步骤;在动态链接库部分,阐述了创建的两种方法,并探讨了动态链接库的隐式和显示链接方式,以及DllMain函数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态链接库的使用

方式1

1.将xxx.h 和 xxx.lib复制到要使用的项目中
2.在需要使用的文件中包含:#include “xxx.h”
3.在需要使用的文件中包含:#pragma comment(lib, “xxx.lib”)

方式2

1.将xxx.h 和 xxx.lib复制到要使用的项目中
2.在需要使用的文件中包含:#include “xxx.h”
在这里插入图片描述

动态链接库的创建

方法1

1.源文件:

int _stdcall Plus(int x,int y)
{
	return x+y;
}

2.头文件:编译为导出函数

extern "C" _declspec(dllexport) __stdcall int Plus (int x,int y);

方法2

1.创建一个.def文件

EXPORTS
Plus	@12	NONAME

动态链接库的使用

方式1 隐式链接

1.将 *.dll *.lib 放到工程目录下面
2.将 #pragma comment(lib,“DLL名.lib”) 添加到调用文件中
3.加入函数的声明
4.这个过程是Windows加载器完成的。
5.__declspec告诉编译器,这个函数来自另外一个DLL

extern "C" __declspec(dllimport) __stdcall int Plus (int x,int y);

方式2 显示链接

1.定义函数指针

typedef int (__stdcall *lpPlus)(int,int);

2.声明函数指针变量

lpPlus myPlus;

3.将dll加载到内存中

HINSTANCE  hModule = LoadLibrary("Dym.dll");

4.获取函数的地址

myPlus = (lpPlus)GetProcAddress(hModule,(char*)0xF);

5.调用函数

int a = myPlus(10,2);

DllMain函数相关

BOOL WINAPI DllMain(  HINSTANCE hinstDLL,  // handle to the DLL module
  DWORD fdwReason,     // reason for calling function
  LPVOID lpvReserved   // reserved);

第一个参数:模块加载的位置DLL本身的实例句柄
第二个参数:调用的条件
在这里插入图片描述
当在一个进程中创建一个线程调用DllMain的情况
进程执行(当DLL被进程 <<第一次>> 调用时,导致DllMain函数被调用)LoadLibrary->创建线程CreateThread->关闭线程->关闭调用的模块FreeLibrary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值