DLL详解

DLL详解

概念

DLL是Dynamic Link Library(即“动态链接库”)的缩写。

DLL和EXE相似的地方在于,都包含了二进制执行代码和其他的一些变量;不同之处在于,DLL中的代码是以API函数的形式存在。

DLL类似于一种代码库,在这个库里存放着各种变量、函数和类。

调用方式

DLL分为两种调用方式:静态调用动态调用

静态调用

静态调用将会产生一个特殊的**.LIB文件(导入库),导入库小于普通的的.LIB**文件,导入库只包含DLL的相关信息,并不包含具体的代码,只提供一个寻找DLL中函数的链接,链接程序直接将其存储在EXE文件内部。

注:.LIB文件即为静态链接库,与DLL不同的是:DLL将程序与DLL文件分开保存,而**.LIB文件是将.LIB**文件嵌入到程序中增加了程序的大小

动态调用

动态调用将不会产生其他文件,但是需要知道DLL的具体路径,直接使用LoadLibrary和GetProcAddress函数来装载,但优点在于并不会增大程序的大小,更加节省了空间

DLL的两种约定

动态库输出函数的约定共两种:调用约定和名字修饰约定。

调用约定

调用约定就是关于被调用方和调用方的参数传递顺序、参数传递方式和参数

常见的调用约定共以下几种:

__cdecl

__stdcall

__fastcall

__thiscall

__clrcall

如果想详细了解可以参考调用约定详解

名字修饰约定

名字修饰约定就是编译器用来识别函数名字的修饰约定。

在编译器编译时将会根据函数原型生成一个标识字符串,该字符串即为函数的修饰名,存储在导入库中,在DLL文件和源文件的函数名是一致的。

**注:**如果在程序开发时和开发DLL时使用的名字修饰约定不一致,将会造成在导入库中依旧寻找不到相应的修饰名即找不到函数。

常见的几种DLL

Kernel32.dll

Kernel32.dll主要包含管理内存、进程和线程的函数。

User32.dll

user32.dll主要包含用于执行用户界面任务的函数。

GDI32.dll

GDI32.dll主要包含用于画图和显示文本的函数。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值