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模块。
分类:
Windows核心编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构