Windows动态链接库-Read.PDF

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows动态链接库-Read

第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——

文档评论(0)

laolao123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档