第六章 动态连接库设计 网络编程技术 教学课件.pptVIP

第六章 动态连接库设计 网络编程技术 教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 动态连接库设计 网络编程技术 教学课件

* * 网 络 编 程 南京理工大学 计算机学院 主 讲 教 师: 吕 建 勇 电 子 邮 箱: lv_jy@126.com 第六章 动态连接库设计 内 容 提 要 1、动态连接库的特点 2、创建动态连接库 3、调用动态连接库 4、动态连接库在网络程序中的应用 §6.1 动态连接库的特点 动态连接库(Dynamic-Link Library)是一些编译过的可执行代码模块,可以在应用程序中或其它DLL中被调用,是Windows的重要组成要素。动态连接库是一个包括了若干函数的可执行模块,其包含的函数可以由Windows应用程序调用以执行一些功能。Windows内核的三个模块USER.EXE、KENERL.EXE和GDI.EXE实际上都是动态连接库,分别提供用户消息服务、进程管理、图形输出等服务。在Windows\System目录下,凡是以.DLL、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都是动态连接库。 多个应用程序可以同时调用同一个动态连接库时,内存中只有该动态连接库的一个实例,这使系统能高效经济地使用内存。动态连接库中的执行模块与调用它的应用程序是完全分开的。几个函数可以放于一个动态连接库中,应用程序使用这些函数,就象它们是应用程序可执行代码的一部分。 §6.1 动态连接库的特点 升级到 DLL 更为容易。DLL中的函数更改时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。相反,静态链接的对象代码要求在函数更改时重新链接应用程序。 动态连接库可以有自己的数据段,但没有自己的堆栈,动态连接库与调用它的应用程序使用相同的堆栈模式,这减少了编程设计上的不便。同时动态连接库实现了代码的封装性,使得程序简洁明晰。 支持动态连接库的创建与具体的编程语言及编译器无关,只要遵守动态连接库的开发规范和编程策略,并安排正确的调用接口,不论用何种编程语言编制的动态连接库都具有通用性。例如在VC中编制的动态连接库程序,可用于BC、VB、Delphi等多种语言环境中。 §6.1 动态连接库的特点 动态连接库函数可以被任何编程语言编写的应用程序所调用,只要应用程序使用统一的函数调用规则,即程序与 DLL 函数在下列方面必须是兼容的:函数期望其参数被推送到堆栈上的顺序,是函数还是应用程序负责清理堆栈,以及寄存器中是否传递了任何参数。 动态连接库中虽然包含了函数的目标代码,但动态连接库中的函数代码是不被包含在应用程序中的,应用程序只是简单地记录了函数的位置信息(即包含于哪个动态连接库中以及在动态连接库中的位置)。有了这些信息后,程序在执行时,即可找到该函数的目标代码。如果应用程序在运行时系统不能找到所需动态连接库,则动态连接库提供的功能对应用程序来说将是不可用的,甚至会因此终止程序的运行。 §6.2 创建动态连接库 源代码文件(.c)的结构 模块定义文件(.DEF)的结构和各段的意义 函数声明文件 工程文件 §6.2.1 源代码文件(.c)的结构 通常,动态连接库由一个或更多的源代码文件(.c)、一个模块定义文件(.def文件)、一个函数声明文件(.H)、以及一个工程文件(.PRJ)组成 。 源代码文件中主要包含动态连接库内部函数的定义,内部函数一般包括三种:入口函数、输出函数和终止函数。 §6.2.1 源代码文件(.c)的结构 源代码文件具体结构示例如下: #include windows.h //入口函数 int FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSeg, WORD cbHeapSize, LPSTR lpszCmdLine ) { if (cbHeapSize!=0) UnlockData(0); //解锁数据段 //…此处可进行一些用户必要的初始化工作 return (1); } //输出函数 int FAR PASCAL ExportFunction1 (int param1,...,char param n){ //...... C语言应用程序 } //终止函数/ int FAR PASCAL WEP ( int /*SystemExit*/ ) { return(1); } §6.2.1 源代码文件(.c)的结构 以上各组成部分及参数的含义: 1)Windows.h头文件,它包含有数据类型的定义、API入口点定义和其它有用的参数信息。 2)PASCAL说明符定义该程序的传递参数和净化堆栈的协定(注意:DLL外部传送的指针必须是远指针FAR)。 3)LibMain函数就象C程序中的

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档