19.1 DLL基础--《Windows核心编程》

Windows 中最重要的三个DLL是:

  • Kernel32.dll:包含的函数用来管理内存、进程以及线程
  • User32.dll:包含的函数用来执行和用户界面相关的任务
  • GDI32.dll:包含的函数用来绘制图像和显示文字

将DLL文件映射到进程空间有两种方法:隐式载入时链接、显示运行时链接


 

如下图,DLL创建过程以及应用程序隐式链接到DLL过程

 


 

导出变量、函数或者类,必须在其前面加上 __declspec(dllexport) 标识符。

如果时编写 C++ 代码,还应该加上 extern "C"。

  extern "C"
  __declspec(dllexport)

导入变量、函数或者类,必须在其前面加上 __declspec(dllimport) 标识符。

(1)何为导出

当 Microsoft 的C/C ++编译器看到变量、函数原型或C++类之前的 __declspec(dllexport) 修改符的时候,它就将某些附加信息嵌入产生的.obj文件中。当链接DLL的所有.obj文件时,链接程序将对这些信息进行分析。 当DLL被链接时,链接程序要查找关于输出变量、函数或C++类的信息,并自动生成一个.lib文件。该.lib文件包含一个DLL输出的符号列表。当然,如果要链接引用该DLL的输出符号的任何可执行模块,该.lib文件是必不可少的。除了创建.lib文件外,链接程序还要将一个导出符号表嵌入产生的DLL文件。这个导出节包含一个导出变量、函数和类符号的列表(按字母顺 序排列)。该链接程序还将能够指明在何处找到每个符号的相对虚拟地址(RVA)放入DLL模块。

 

posted @ 2022-11-23 11:25  人类观察者  阅读(32)  评论(0编辑  收藏  举报