《程序员的自我修养》读书笔记6
2015-07-08 19:48
316 查看
Windows下的动态链接
DLL文件的扩展名不一定是.dll,也可能是别的,比如.ocx(OCX控件)或者是.CPL(控制面板程序)。
DLL的设计目的与共享对象有些出入,DLL更加强调模块化,即微软希望通过DLL机制加强软件的模块化设计,使得各种模块之间能够松散地组合、重用和升级。
一、声明导出函数的方法
使用_declspec( dllexport)扩展,或者使用模块定义(.def)文件声明;
使用.def文件来描述DLL文件的导出属性的好处:首先,可以控制导出符号的符号名,其次是可以控制一些链接的过程。
二、EXP文件的作用
创建DLL时,会产生一个EXP文件,这个文件实际上是链接器在创建DLL时的临时文件。链接器在创建DLL时采用两遍扫描过程,DLL一般都有导出符号,链接器在第一遍时会遍历所有的目标文件并且收集所有导出符号的信息并且创建DLL的导出表,为了方便起见,链接器把这个导出表存放在一个临时的目标文件中叫做“.edata”的段中,这个目标文件就是EXP文件,EXP文件实际上是一个标准的PE/COFF目标文件,只不过它的扩展名不是.obj而是.exp。
三、DLL怎样做到在多个模块之间共享
Linux下的ELF文件,通过GOT机制实现共享对象的地址无关性,但是Windows下的PE DLL的代码段并不是地址无关的,它通过重定基地址的方法实现DLL共享;
"__declspec(dllimport)"的作用:一旦一个函数被声明为“__declspec(dllimport)”,那么编译器就知道它是外部导入的,以便于产生相应的指令形式。
DLL文件的扩展名不一定是.dll,也可能是别的,比如.ocx(OCX控件)或者是.CPL(控制面板程序)。
DLL的设计目的与共享对象有些出入,DLL更加强调模块化,即微软希望通过DLL机制加强软件的模块化设计,使得各种模块之间能够松散地组合、重用和升级。
一、声明导出函数的方法
使用_declspec( dllexport)扩展,或者使用模块定义(.def)文件声明;
使用.def文件来描述DLL文件的导出属性的好处:首先,可以控制导出符号的符号名,其次是可以控制一些链接的过程。
二、EXP文件的作用
创建DLL时,会产生一个EXP文件,这个文件实际上是链接器在创建DLL时的临时文件。链接器在创建DLL时采用两遍扫描过程,DLL一般都有导出符号,链接器在第一遍时会遍历所有的目标文件并且收集所有导出符号的信息并且创建DLL的导出表,为了方便起见,链接器把这个导出表存放在一个临时的目标文件中叫做“.edata”的段中,这个目标文件就是EXP文件,EXP文件实际上是一个标准的PE/COFF目标文件,只不过它的扩展名不是.obj而是.exp。
三、DLL怎样做到在多个模块之间共享
Linux下的ELF文件,通过GOT机制实现共享对象的地址无关性,但是Windows下的PE DLL的代码段并不是地址无关的,它通过重定基地址的方法实现DLL共享;
"__declspec(dllimport)"的作用:一旦一个函数被声明为“__declspec(dllimport)”,那么编译器就知道它是外部导入的,以便于产生相应的指令形式。
相关文章推荐
- 黑马程序员---反射
- 黑马程序员--小结
- block面试题
- 史上最全的程序员求职渠道总结
- 细说高级程序员的几个成长阶段
- 对程序员非常重要的24个软技能
- 【面试题】-反转句子
- (剑指Offer)面试题11:数值的整数次方
- 黑马程序员——JAVA String类
- 黑马程序员——JAVA异常
- 黑马程序员——JAVA类和对象
- 黑马程序员—Java反射
- Java7K面试题—银行业务调度系统
- 黑马程序员—交通灯管理系统
- (剑指Offer)面试题10:二进制中1的个数
- 记一次糟糕的面试
- 黑马程序员---正则表达式
- 程序猿职业规划,未来该何去何从
- 阿里巴巴常考面试题及汇总答案
- (剑指Offer)面试题9:斐波那契数列