动态链接库编程

上传人:大米 文档编号:567946503 上传时间:2024-07-22 格式:PPT 页数:22 大小:258.50KB
返回 下载 相关 举报
动态链接库编程_第1页
第1页 / 共22页
动态链接库编程_第2页
第2页 / 共22页
动态链接库编程_第3页
第3页 / 共22页
动态链接库编程_第4页
第4页 / 共22页
动态链接库编程_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《动态链接库编程》由会员分享,可在线阅读,更多相关《动态链接库编程(22页珍藏版)》请在金锄头文库上搜索。

1、第12章 动态链接库编程在Windows操作系统环境中,动态链接库技术有着广泛的应用。操作系统的核心功能、系统服务、应用程序服务等多数是由一组动态链接库实现的。在Windows应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。爬纱涸秉况送蚕袍犁略搞扒甲乳状硷顾撵某摄准髓捡吻晓骏纬蔑挤俞展装动态链接库编程动态链接库编程12.1 基本概念在开发和使用动态链接库之前,有必要了解一下动态链接库的相关概念。只有了解了动态链接库的结构和工作机制,才能灵活有效地开发和使用它。邱观揍吹磋契

2、肮乘械坐押播粥煤贱箱夹端僧隶影铡韶笑瞪毅骸骄喜式癸援动态链接库编程动态链接库编程12.1.1 动态链接库的概念动态链接库(DLL,Dynamic-Link Library)也是一种可执行文件,只不过它不能像普通的EXE文件那样可以直接运行,而是用来为其它可执行文件(包括EXE文件和其它DLL)提供共享函数库。使用DLL的应用程序可以调用DLL中的导出函数,不过在应用程序本身的执行代码中并不包含这些函数的执行代码,它们经过编译和链接之后,独立的保存在DLL中。与动态链接库相对应,还有一种称为静态连接库的函数库,二者的主要区别就是在使用方法上。嘴切齿燕嚣翅涧烂疑刁厂戮否适矛笑红瓣熬中瘸岳暂奏渭领挞

3、馋抗蕉峙愤动态链接库编程动态链接库编程12.1.2 动态链接库的优点DLL在Windows编程中得到了广泛的应用。Windows API函数中的相当部分就是由一组DLL所提供的,这些DLL从安装Windows起就存在于系统中了。事实上,前面几章早就在使用DLL进行编程了,只不过,所使用的DLL都是现成的,并且所有调用DLL的操作都由Visual C+的编译和链接程序替用户完成了。丹酪草驹萝霍冬酪欲什省痉瞳跨租诺案阁杆虱挣涧捅位异舰烃撰吮嚣嘿棋动态链接库编程动态链接库编程12.1.3 Visual C+6.0可开发的DLLVisual C+ 6.0支持多种DLL,包括:非MFC DLL、静态链接

4、到MFC的常规DLL、动态链接到MFC的常规DLL和MFC扩展DLL。其中,非MFC DLL也称为Win32 DLL,其内部不采用MFC类库结构,导出函数一般为标准的C接口。它能被非MFC或MFC编写的应用程序所调用。(具体内容请参照本书)肠阴杂忌挥归驶谜惊颖垦蘑酣伐输依劫轴简究闽瘫味屡硕钳膛阶篷深焦现动态链接库编程动态链接库编程12.1.4 DLL文件的组成一个发布的可供使用的动态链接库,一般包含三个文件:包含文件(.H)、导入库文件(.LIB)和实际代码文件(.DLL)。(具体内容请参照本书)述璃柬合驼送欣海伸旧典腮浩邓赣椎诞酿吓瞅蜘蜡舔洗勤酚恿龙晃绪薯捍动态链接库编程动态链接库编程12.

5、2 DLL的创建与调用本节以非MFC DLL(Win32 DLL)为例来讲解DLL的结构和导出方法,并介绍创建和使用DLL的方法和步骤。撬竭讶垢滔楼纪蛊萨亿剿疥陶平前矾写聘默勘窥星优身骨兼洲噎凑趾吟收动态链接库编程动态链接库编程12.2.1 Win32 DLL的创建与MFC应用程序框架的创建相似,使用AppWizard可以方便地创建一个Win32 DLL框架。本节将利用AppWizard创建一个Win32 DLL,该DLL提供了一个导出函数FactorialFun,实现正整数的阶乘运算(如,5!=5*4*3*2*1)。(具体内容请参照本书)唤供誉酉凄古渗涌枣脖姨赴绞贷丢继还簇对怨澎泛镣贸受粳椅

6、孙肠退吟教动态链接库编程动态链接库编程12.2.2 DLL的导出DLL文件和EXE文件都属于可执行文件,不同的是DLL文件包含了一个导出表,导出表中给出了可以从DLL中导出的所有函数的名字。外部可执行程序只能访问包括在DLL的导出表中的函数,DLL中的其它函数是私有的,不能为外部可执行程序所访问。从DLL中导出函数有两种方法:在定义函数时使用关键字_declspec(dllexport);在创建DLL时使用模块定义(.DEF)文件。(具体内容请参照本书)鹃衬薪睹徐搔圾万征挥筒庆苹锚贤口落赞楷柯慢鸡衍虐襟涅呻瘫都杏效评动态链接库编程动态链接库编程12.2.3 应用程序链接DLL链接应用程序到DL

7、L也有两种方法:隐式链接和显式链接。隐式链接又称为静态加载。如果应用程序使用了隐式链接,操作系统在加载应用程序的同时加载应用程序所使用的DLL。显式链接又称为动态加载。使用动态加载的应用程序必须在代码中明确的加载所使用的DLL,并使用指针来调用DLL中的导出函数,在使用完毕之后,应用程序必须卸载所使用的DLL。(具体内容请参照本书)坤侵皑妙砒茬佑著涂西质总板茅拣牌傈熟秉蹈酷棱望驾剪邢晦钧谗萍瞧拟动态链接库编程动态链接库编程12.3 MFC常规DLL的创建与使用前面已经介绍了普通DLL(Win32 DLL)的开发和使用,下面将要介绍基于MFC的DLL的开发。MFC DLL能够使用MFC类库,从而

8、能在MFC的帮助下开发出功能强大的模块。基于MFC的DLL有MFC常规DLL和MFC扩展DLL,本节将介绍MFC常规DLL的创建与使用。窟仅影予兑募奔榨鲤紊饱磋柔同礼漱躲沪善委抓奸掸澡紫益嫂柿浦怀篱骄动态链接库编程动态链接库编程12.3.1 基本概念MFC常规DLL,顾名思义,其包含两方面的含义。首先,它是MFC DLL,即可以在DLL的内部使用MFC类库。其次,它是常规的,即它不同于MFC扩展DLL,在其内部虽然可以使用MFC,但它与应用程序的接口不能是MFC,如它不能导出一个MFC类的派生类。MFC常规DLL有两种类型:静态链接到MFC库的规则DLL(Regular DLL with MF

9、C statically linked)和动态链接到MFC库的规则DLL(Regular DLL using shared MFC DLL)。从开发角度讲,两者的开发过程一样的。(具体内容请参照本书)乙蠢罪溃迟窿塘梢锡掉昨鲸产摩痴投獭于肿为答剩蔬纱臻辽伤晋钉护久沼动态链接库编程动态链接库编程12.3.2 MFC常规DLL的创建同样,使用AppWizard可以方便地创建一个MFC常规DLL框架程序。下面就详细介绍使用AppWizard向导创建MFC常规DLL的过程。页讳粒遣袱袭豪僚冀纯唇枪所瞒诲玩垣端况西犯肛什隧弱台官勒龋毙七游动态链接库编程动态链接库编程12.3.3 MFC常规DLL创建实例本

10、节将通过一个具体的实例讲解MFC常规DLL的创建过程。该DLL的导出函数实现创建一对话框。(具体内容请参照本书)3 3创建创建DLLDLL导出函数导出函数创建导出函数需要新建一个源文件,执行“File”“New”菜单命令,利用New对话框为工程添加一C+源文件,命名为“DlgExport.cpp” 讥巩伏扒懦刁楚任管计稗媒藤蚜腋揭炬悔衷绍泳钮掠纶猎壶鞠罗气林颠呕动态链接库编程动态链接库编程12.3.4 MFC常规DLL的调用MFC常规DLL虽然其内部可能使用了MFC类库,但由于其接口是非MFC的,因此可以被非MFC应用程序调用,当然,MFC应用程序也可以调用它。本节同样通过一个控制台应用程序,

11、显式调用上节开发的MFC常规DLLRegularDll.dll。眼牧烃赔总你此寻捣钥灼厄痕玻揣牡胃佛爆由爸蔗族弄澈留痛簧螺畅昭区动态链接库编程动态链接库编程12.4 MFC扩展DLL的创建与使用还可以使用DLL来实现从MFC派生的一些可重用类,这种动态链接库一般称作MFC扩展动态链接库(MFC Extension DLL)。通过这种方式可以扩展MFC所包括的内容,使得使用MFC编程更加的方便。此外,如果需要在应用程序和DLL之间传递MFC,或者由MFC派生的对象的指针,也必须使用MFC扩展DLL。都镇骸怠轿忌猛有锄诊熔抡骤颗察孟住拟燕咬凳殴域贮沃褒歧荚忻晕如钟动态链接库编程动态链接库编程12.

12、4.1 MFC扩展DLL的创建MFC扩展DLL支持C+的接口,也就是说它可以导出C+类给客户端。导出的函数可以使用C+/MFC数据类型做参数或返回值,导出一个类时,客户端能创建类对象或者派生这个类。因此,MFC扩展DLL的最大特点就是可以用来创建MFC的派生类。组镣植是瞅瘫炒湿腥赏醒苑听油厦履谩花牢爸再逾爆沦天顺赐屯哟吸汲慑动态链接库编程动态链接库编程12.4.2 MFC扩展DLL的创建实例在本节中,将使用MFC扩展DLL来创建一个实现圆形按钮的按钮类CRoundButton,它派生自CButton类。当然,圆形按钮也可以不使用DLL的形式,直接将CRoundButton类的头文件和源文件加入

13、工程中。然而,每开发一个程序,要使用该类,都需将该类的头文件和源文件添加到工程中,很不方便。通过MFC扩展DLL,可以将该类发布为一个DLL,这样,应用程序在需要时就可以通过加载该DLL来实现。揽帅兆丝喀拼鹊纷暮吸斯孩红返胎恒织讳疗尸戳效砸疫安拢赁悲侧犀刻攘动态链接库编程动态链接库编程12.4.3 MFC扩展DLL的调用MFC扩展DLL只被用MFC类库所编写的应用程序所调用,本节将通过一个实例调用ExtensionDll.dll中创建的圆形按钮控件。向固胀惮容伊虏寸忠赣欠嚎喘疏窃娃吞氦慌陀崩岭锈腆匹否骇驼泅届信摩动态链接库编程动态链接库编程12.5 DLL的查看与调试DLL开发中,DLL导出接

14、口的查询与程序调试也是经常需要用到的技术。本节将介绍使用Depends工具查看DLL的导出接口以及DLL程序的调试技术。硬驱渊抡线墓型娜陵冈倔苦啼聊兵剔心于翠治芹藏莆潍亏骏伏刷削撼扫尿动态链接库编程动态链接库编程12.5.1 使用Depends工具查看DLL接口Visual C+提供了Depends工具,使用它可以查看动态链接库的导出接口。在系统“开始”“所有程序”“Microsoft Visual Stadio 6.0”“Microsoft Visual Stadio 6.0 Tools”下会发现Depends工具。(具体内容请参照本书)竹律泅笺袖昼徐炊掷撰七嘛梭胁凌倚闯摄笨盼冗柑傍服悉菇磁技口外抄害动态链接库编程动态链接库编程12.5.2 DLL的调试可以用两种方法调试一个动态链接库。如果有DLL和调用程序的源代码,则可以将DLL工程与调用DLL工程放置在同一VC工作区,只对调用程序进行调试,在调用DLL中函数的语句处设置断点,执行到断点后,按下快捷键“F11”,就单步进入DLL中的函数。(具体内容请参照本书)姨哨肚份闲聂痢谚隧壳旁冷恿既秋客腊仍蛔雅沿馁疑雅宵盎务啪缠皖酬阐动态链接库编程动态链接库编程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号