DLL基础
——Windows核心编程学习手札之十九
Windows API中的所有函数都包含在DLL中,3个最重要的DLL是Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll包含用于画图和显示文本的各个函数。Windows还配有若干别的DLL,用于执行一些特殊任务,如AdvAPI32.dll包含用于实现对象安全性、注册表操作和事件记录的函数;ComDlg32.dll包含常用对话框(如File Open和File Save);ComCtl32.dll则支持所有的常用窗口控件。
在DLL中通常没有用来处理消息循环或创建窗口的支持代码,DLL只是一组源代码模块,每个模块包含了应用程序(可执行文件)或另一个DLL将要调用的一组函数。当所有源代码文件编译后,它们就像应用程序的可执行文件那样被链接程序所链接。对于一个DLL,需要设定链接程序的/DLL开关,该开关使得链接程序能够向产生的DLL文件映像发出稍有不同的信息,如此,操作系统加载程序就能将该文件映像视为一个DLL而不是应用程序。在应用程序或另一个DLL能够调用DLL中的函数之前,DLL文件映像必须被映射到调用进程的地址空间中,可选用加载时的隐含连接和运行期的显示连接。一旦DLL的文件映像被映射到调用进程的地址空间中,DLL的函数就可以供进程中运行的所有线程使用。
创建DLL模块步骤:
1)先创建一个头文件,包含从DLL输出的函数原型、结构和符号,DLL的所有源代码模块均包含该头文件、以帮助创建DLL;
2)要创建一个C/C++源代码模块(或多个模块),用于实现在DLL模块中的函数和变量;
3)创建DLL模块,编译器对每个源代码模块进行处理,产生.obj模块;
4)所有.obj模块创建完成后,链接程序将所有.obj模块内容组合在一起,产生一个DLL映像文件,包含用于DLL的所有二进制代码和全局/静态数据变量;
5)如果链接程序发现DLL的源代码模块至少输出了一个函数或变量,那么链接程序也生成一个.lib文件,列出所有已输出函数和变量的符号名;
创建可执行模块(调用DLL)步骤:
6)在引用函数、变量、数据、结构或符号的所有源代码模块中,必须包含DLL开发人员创建的头文件;
7)要创建一个C/C++源代码模块(或多个模块),在可执行模块中实现DLL中的函数和变量;
8)创建可执行模块,编译器生成.obj模块,链接程序组合.obj生成可执行的映像文件;
运行可执行模块(调用DLL),操作系统的加载程序执行步骤:
9)加载程序为新进程创建一个虚拟地址空间,可执行模块被映射到新进程的地址空间,加载程序对可执行模块的输入进行分析。对于列出的每个DLL名字,加载程序找出用户系统上的DLL模块,再将该DLL映射到进行的地址空间。
分享到:
相关推荐
分享Perl_学习手札书籍,供大家学习、参考及交流perl。
打造魅力组合——在iBook 上安装Linux手札.pdf
perl学习手札,共同学习,共同进步。希望你能很快掌握perl。
关于作者: 简信昌 “傲尔网”专案经理 博仲法律事务所资讯部门 台北Perl推广组 (Taipei.pm) 召集人 Newzilla召集人 目前专案: Open Source Foundry (OSSF) Newzilla 线上杂志 ...“Perl学习手札”
Perl学习手札.chmPerl学习手札.chmPerl学习手札.chm
1-高级perl编程(黑豹书).pdf 2-Perl_学习手札.pdf
Perl 学习手札,这本书介绍了perl的基本语法及perl的一些用法,想了解perl的就看一看
hibernate学习手札.z03
Perl 学习手札,好东西
Spring 注解学习手札,个人学习Spring mvc的知识总结
hibernate学习手札.z01
NULL 博文链接:https://snowolf.iteye.com/blog/1628861
本资料完全来源于网上收集,对于作者并没有做过多的考证,考虑到作者本身,所以保持原作品不变只是略加整理,为用户提供一个方便的浏览方式。
非常著名的perl学习手札(初学者有福了),本文档是精美的PDF版,排版精美,是网络上到现在为止能找到的最好的。 全书共分17个小节,通过讲解实例来学习perl,你可以复制这些代码,然后执行。学习非常方便!
8086汇编学习手札及各章节检测题详细答案。 配套书籍 王爽的汇编
这个事单片机资源开发过程的学习手记,自己的学习心得希望对广大学员有好处
(数据科学学习手札139)geopandas 0.11版本重要新特性一览.doc
Perl是由Larry Wall设计的,并由他不断更新和维护的编程语言。 .Perl具有高级语言(如C)的强大能力和灵活性。事实上,你将看到,它的许多特性是从C语言中借用来的。 .与脚本语言一样,Perl不需要编译器和链接器...
自己写的几个比较常用的java代码片段,开发和面试中可能都会用到,这些知识点很容易被遗忘。