失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > DLL基础——Windows核心编程学习手札之十九

DLL基础——Windows核心编程学习手札之十九

时间:2022-05-21 02:34:41

相关推荐

DLL基础——Windows核心编程学习手札之十九

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映射到进行的地址空间。

如果觉得《DLL基础——Windows核心编程学习手札之十九》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。