- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章Windows动态链接库-Read.PDF
第9章 Windows 动态链接库
教学提示: 自从Microsoft 公司推出第一个版本的 Windows 操作系统以来,动态链接
库(DLL)一直是这个操作系统的基础。Windows API 中的所有函数都包含在DLL 中。三个
最重要的DLL 是:Kernel32.dll ,包含用于管理内存、进程和线程的各个函数;User32.dll ,
包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll ,包含用
于画图和显示文本的各个函数。当然 Windows 还配有若干别的 DLL ,它们提供了用于执
行一些特殊任务的函数。如AdvAPI32.dll 包含用于实现对象安全性、注册表操作和事件记
录的函数,ComDlg32.dll 包含常用对话框(如File Open 和File Save) ,ComCtl32.dll 则支持
常用窗口控件。本章将要介绍如何为应用程序创建DLL 。
教学目标:了解动态链接库的基础知识,理解动态链接库的运行机制,学会创建三种
常见的动态链接库应用程序。
9.1 动态链接库基础
9.1.1 什么是 DLL
一个Windows 应用程序是一个可执行文件,它创建一个或多个窗口并用一个消息循环接
收用户输入。而动态链接库通常不能直接运行,也一般不接收消息。DLL 是包含函数的独立
文件(某些DLL 也可包含类或数据) 。通过其他应用程序或DLL 调用来完成特定的功能。
9.1.2 动态链接和静态链接
动态链接是相对于静态链接来说的。在程序开发过程中,产生一个Windows 可执行文
件,需要链接不同的目标模块(.obj)、运行时库(.lib)文件以及编译过的资源(.res)文件,此时
的链接称为静态链接。与静态连接相对应,动态链接发生在程序运行时。
9.1.3 DLL 与进程的地址空间
在应用程序(或另一个DLL)能够调用DLL 中的函数之前,必须能够找到DLL 文件中
的函数,即DLL 文件必须被映射到调用进程的地址空间中。有两种方式可以实现这一点,
即加载时的隐含链接或运行时的显式链接(后面介绍) 。一旦DLL 被映射到调用进程的地址
空间中,DLL 的代码和数据看上去就像是在进程的地址空间中的额外代码和数据一样。
DLL 中函数代码创建的任何对象均由调用线程所拥有,而DLL 本身并不拥有任何东西。
9.1.4 显式链接与隐式链接
链接 DLL 到可执行程序有两种方式:隐式链接和显式链接。隐式链接时,使用DLL
的可执行程序需要链接DLL 的导入库(.lib 文件) 。可执行程序需要获取以下内容:包含导
第 9章 Windows 动态链接库 ·253 ·
出函数(或导出类)声明的头文件、导入库(.lib 文件) 、实际的DLL(.dll 文件) 。从编程的角度
看,调用导出函数与调用其他函数完全一样。
显式链接时,使用DLL 的可执行程序在运行时通过函数调用来显示加载或卸载DLL ,
并通过函数指针来调用DLL 的导出函数。
9.1.5 DLL 的搜索路径及 extern “C”修饰符
如果显式链接 DLL ,那么可以指定DLL 的路径。如果不指定路径或用隐式链接,那
么Windows 将使用下列搜索顺序来寻找DLL ,即包含EXE 文件的目录、进程的当前目录、
Windows 系统目录、环境变量列出的目录。需要注意的是,因为有这么多搜索路径,所以
要注意DLL 版本的一致性,否则容易发生运行老版本DLL 的错误。
通常来说,C++编译器会改变函数和变量的名字,而加上extern “C ”修饰符,就可以
告诉编译器不要改变变量名或函数名,这样,我们编写的DLL 中输出的变量和函数就可以
供使用C、C + +或任何其他编程语言编写的可执行模块来访问。
9.2 基于 C 语言的动态链接库
在 Visual C++ 中,工作空间(workspaces)和项目(projects)不同。项目通常与建立的应
用程序(.exe)或者动态链接库(.dll)相联系。一个工作空间可以包含一个或多个项目。现在就
建立一个包含两个项目的工作空间Li9_1——
您可能关注的文档
最近下载
- 2009石油化工行业检修工程动工预算定额说明.docx
- YB∕T6294-2024 锌铝合金镀层弹簧钢丝(报批稿).pdf VIP
- TSGZ6001—2019特种设备作业人员考核规则正文.pdf VIP
- 新湘教版七年级数学上册全册导学案.pdf VIP
- 2025年内蒙古自治区呼和浩特市初一新生入学分班考试真题含答案.docx VIP
- 2025年西藏高考理综真题试卷及答案.docx VIP
- 部编人教版一年级数学上册全册教案.docx VIP
- 超市经营服务方案.docx VIP
- 腐蚀数据与选材手册-校对版.xls VIP
- 六年级下册语文试卷-《金色的鱼钩》一课一练(含答案)人教部编版.pdf VIP
文档评论(0)