深入浅出DLL(基础篇)
来源:互联网 发布:数据审核制度 编辑:程序博客网 时间:2024/04/29 23:43
DLL(Dynamic Link Library),是动态链接库的简称,是一个不可执行的二进制文件,根据相应规则可执行文件可以使用dll的导出资源(dll里的函数等),要深入理解dll和用好dll必须理解dll里的资源(函数和变量)是如何被可执行文件使用的?搞清这一点,只需从三方面入手,一是dll资源如何导出;二是dll资源如何导入;三是dll如何加载。
1.dll资源如何导出
如果把可执行文件比作是汽车,DLL比作是汽车的轮胎,汽车要与轮胎完美契合,这取决于汽车与轮胎之间的接口是否一致,dll导出资源就相当于给轮胎定义接口,只不过dll定义的接口是dll的资源,那么怎么才能导出dll资源呢,这里以windows为例,只需在要导出的函数和变量的声明前加上__declspec(dllexport)就ok了,这样编译器在编译的时候就知道该接口是要导出的会加一个标记,以方便链接器在链接的时候就生成dll资源导出表,这个导出表建立了资源符号(函数和变量的名称)和资源地址的对应关系。
2.dll资源如何导入
同理汽车也要有一个与轮胎对应的接口,这里可执行文件也要定义接口,方法是在使用到的接口声明前加上__declspec(dllimport)就ok了,这样编译器在编译的时候就知道该接口是导入接口(来自dll),同样也会加一个标记,这样链接器在遇到加了标记的接口,就会从dll去找实现,若不能从dll的导出表中找到对应的接口,就会报链接错误(如外部符号未定义),若找到,则会生成一个导入表,该表包括dll模块的名称以及该模块的接口符号,补充说明下,有些链接器(如VC++ 6.0使用的链接器)不会从dll中找接口的实现,而是从.lib文件中找,该文件是在dll文件生成时生成的,里面只存放的是资源的导出符号,而没有实现,但这已经足够了,在这里链接器关心的是导出符号表,从导出符号表能找到对应的接口,就认为有了dll实现,这从另一个侧面反应了dll的动态性,只要导出符号(接口)相同,实现可以任意定制。
3.Dll如何加载
前面1、2步只是给汽车装上了轮胎,到这里只是他们之间的接口对应上了,轮胎是不是残次品,还得看它的质量,也即dll的实现。
- 深入浅出DLL(基础篇)
- 深入浅出RxJava(基础篇)
- 深入浅出RxJava(基础篇)
- dll深入浅出
- VC++动态链接库(DLL)编程深入浅出(转帖:基础班)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 获取 .properties 配置文件中的值
- 如何制作win7矢量图标 - 待翻译
- import thread
- 破解win7密码
- 平衡二叉树
- 深入浅出DLL(基础篇)
- 一些微小但是又不得不知道的问题(持续更新)
- Android使用摄像头拍照
- import threading
- 从零开始学习C++6.0之并口控制(第七课 步进电机的步数控制)
- pig使用记录
- SQL检索数据
- struts1.2中从一个action跳转到另外一个action的方法
- twisted