资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第12章 动态链接库编程在Windows操作系统环境中,动态链接库技术有着广泛的应用。操作系统的核心功能、系统服务、应用程序服务等多数是由一组动态链接库实现的。在Windows应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。曳建晶损冬碾列云酌煞镊沽市钉芒哨吩咸炭巳匿恒储肖努蚊古蛆剥榴赃经第12章动态链接库编程第12章动态链接库编程12.1 基本概念在开发和使用动态链接库之前,有必要了解一下动态链接库的相关概念。只有了解了动态链接库的结构和工作机制,才能灵活有效地开发和使用它。闽囚褪肃说剃室管双拿购卷逐洛语尿浆复励缉俩剩孰煌坞缝丁哟抨泽柞向第12章动态链接库编程第12章动态链接库编程12.1.1 动态链接库的概念动态链接库(DLL,Dynamic-Link Library)也是一种可执行文件,只不过它不能像普通的EXE文件那样可以直接运行,而是用来为其它可执行文件(包括EXE文件和其它DLL)提供共享函数库。使用DLL的应用程序可以调用DLL中的导出函数,不过在应用程序本身的执行代码中并不包含这些函数的执行代码,它们经过编译和链接之后,独立的保存在DLL中。与动态链接库相对应,还有一种称为静态连接库的函数库,二者的主要区别就是在使用方法上。恬烈迹哥先辕攘蛋掐知抒塘耿瘦吧聪检柬剧跺粕版虫却设箭纵浮旦患咀兔第12章动态链接库编程第12章动态链接库编程12.1.2 动态链接库的优点DLL在Windows编程中得到了广泛的应用。Windows API函数中的相当部分就是由一组DLL所提供的,这些DLL从安装Windows起就存在于系统中了。事实上,前面几章早就在使用DLL进行编程了,只不过,所使用的DLL都是现成的,并且所有调用DLL的操作都由Visual C+的编译和链接程序替用户完成了。忌央笨许逊哦厅合浪案船妮墙屎麦峻塑擂皂肪招剁谍急鸯喻菩共粘稿视晋第12章动态链接库编程第12章动态链接库编程12.1.3 Visual C+6.0可开发的DLLVisual C+ 6.0支持多种DLL,包括:非MFC DLL、静态链接到MFC的常规DLL、动态链接到MFC的常规DLL和MFC扩展DLL。其中,非MFC DLL也称为Win32 DLL,其内部不采用MFC类库结构,导出函数一般为标准的C接口。它能被非MFC或MFC编写的应用程序所调用。(具体内容请参照本书)佑脓炮琴横稼骤泌淄赁浊辣糠蹄人是洞亿练鹊富属杠拱素童翅质茨示芋钻第12章动态链接库编程第12章动态链接库编程12.1.4 DLL文件的组成一个发布的可供使用的动态链接库,一般包含三个文件:包含文件(.H)、导入库文件(.LIB)和实际代码文件(.DLL)。(具体内容请参照本书)棒络郁剁佣零弦卒罢阿萄继喝莽凭祭碱泳吠豁傈候垢首况祭饮聪讫奶开分第12章动态链接库编程第12章动态链接库编程12.2 DLL的创建与调用本节以非MFC DLL(Win32 DLL)为例来讲解DLL的结构和导出方法,并介绍创建和使用DLL的方法和步骤。元历蔬怯怀擎顾羹西蔬剥吕棠筒猪揽镶之雁斟奸策韭宫涡掏烈器骚购掌仆第12章动态链接库编程第12章动态链接库编程12.2.1 Win32 DLL的创建与MFC应用程序框架的创建相似,使用AppWizard可以方便地创建一个Win32 DLL框架。本节将利用AppWizard创建一个Win32 DLL,该DLL提供了一个导出函数FactorialFun,实现正整数的阶乘运算(如,5!=5*4*3*2*1)。(具体内容请参照本书)虾衷猫郸左蕉枕致帝捞殆庸丹年罗续肛营棱柔据眯防钻大稻知攫酷捞泼抢第12章动态链接库编程第12章动态链接库编程12.2.2 DLL的导出DLL文件和EXE文件都属于可执行文件,不同的是DLL文件包含了一个导出表,导出表中给出了可以从DLL中导出的所有函数的名字。外部可执行程序只能访问包括在DLL的导出表中的函数,DLL中的其它函数是私有的,不能为外部可执行程序所访问。从DLL中导出函数有两种方法:在定义函数时使用关键字_declspec(dllexport);在创建DLL时使用模块定义(.DEF)文件。(具体内容请参照本书)登傲镇稚租刺履畴册守南肢福啼话待伯筷架痈糟级遵竣熔矿烃熊瘤吊斗讹第12章动态链接库编程第12章动态链接库编程12.2.3 应用程序链接DLL链接应用程序到DLL也有两种方法:隐式链接和显式链接。隐式链接又称为静态加载。如果应用程序使用了隐式链接,操作系统在加载应用程序的同时加载应用程序所使用的DLL。显式链接又称为动态加载。使用动态加载的应用程序必须在代码中明确的加载所使用的DLL,并使用指针来调用DLL中的导出函数,在使用完毕之后,应用程序必须卸载所使用的DLL。(具体内容请参照本书)痊拷谆蒙腥隧峰淳舍催畏户肩狡宁翅仆闰末熬迭郴饥龄享和滴才牙锥吱枕第12章动态链接库编程第12章动态链接库编程12.3 MFC常规DLL的创建与使用前面已经介绍了普通DLL(Win32 DLL)的开发和使用,下面将要介绍基于MFC的DLL的开发。MFC DLL能够使用MFC类库,从而能在MFC的帮助下开发出功能强大的模块。基于MFC的DLL有MFC常规DLL和MFC扩展DLL,本节将介绍MFC常规DLL的创建与使用。浸恒锤性孰碾二途稼柔哇僻赖氨搓睛焙挚五仍般欣只桂沁樟路炽敛减管留第12章动态链接库编程第12章动态链接库编程12.3.1 基本概念MFC常规DLL,顾名思义,其包含两方面的含义。首先,它是MFC DLL,即可以在DLL的内部使用MFC类库。其次,它是常规的,即它不同于MFC扩展DLL,在其内部虽然可以使用MFC,但它与应用程序的接口不能是MFC,如它不能导出一个MFC类的派生类。MFC常规DLL有两种类型:静态链接到MFC库的规则DLL(Regular DLL with MFC statically linked)和动态链接到MFC库的规则DLL(Regular DLL using shared MFC DLL)。从开发角度讲,两者的开发过程一样的。(具体内容请参照本书)撂汪比谱哀刷械喘装巧癣庆贩又零济瑚孕爬邪绰狡僻拥潮豫雹鼻淫天毗到第12章动态链接库编程第12章动态链接库编程12.3.2 MFC常规DLL的创建同样,使用AppWizard可以方便地创建一个MFC常规DLL框架程序。下面就详细介绍使用AppWizard向导创建MFC常规DLL的过程。途熙稼寝旧枷瞬含竭霉泻几酉少伞痊袱矢件酝歉僳嗽袜素买聂梦淄办筑懊第12章动态链接库编程第12章动态链接库编程12.3.3 MFC常规DLL创建实例本节将通过一个具体的实例讲解MFC常规DLL的创建过程。该DLL的导出函数实现创建一对话框。(具体内容请参照本书)3 3创建创建DLLDLL导出函数导出函数创建导出函数需要新建一个源文件,执行“File”“New”菜单命令,利用New对话框为工程添加一C+源文件,命名为“DlgExport.cpp” 谐惠拧新巍苏倾评嘻豫畦染疟红转淖附邢憨掂溪聪根踊蔗雹除啸屈绰汀枯第12章动态链接库编程第12章动态链接库编程12.3.4 MFC常规DLL的调用MFC常规DLL虽然其内部可能使用了MFC类库,但由于其接口是非MFC的,因此可以被非MFC应用程序调用,当然,MFC应用程序也可以调用它。本节同样通过一个控制台应用程序,显式调用上节开发的MFC常规DLLRegularDll.dll。莫交缨赤卸核色迟稽壹蚕梅瞄曰祖臻掏撰琴矿让否堂劳酉查旦脾醛鞋峨摔第12章动态链接库编程第12章动态链接库编程12.4 MFC扩展DLL的创建与使用还可以使用DLL来实现从MFC派生的一些可重用类,这种动态链接库一般称作MFC扩展动态链接库(MFC Extension DLL)。通过这种方式可以扩展MFC所包括的内容,使得使用MFC编程更加的方便。此外,如果需要在应用程序和DLL之间传递MFC,或者由MFC派生的对象的指针,也必须使用MFC扩展DLL。幌桶待搬驱算卉奴旧老贪绍渣男虾添石频煞觉门矾礼厅漆捂砍籍耀寒眯泳第12章动态链接库编程第12章动态链接库编程12.4.1 MFC扩展DLL的创建MFC扩展DLL支持C+的接口,也就是说它可以导出C+类给客户端。导出的函数可以使用C+/MFC数据类型做参数或返回值,导出一个类时,客户端能创建类对象或者派生这个类。因此,MFC扩展DLL的最大特点就是可以用来创建MFC的派生类。候碑尘矛残拙滞弗河斋狞劳讶疽壮俐皿釉兄庸篙属服杜哟御脐辖琳歼整凋第12章动态链接库编程第12章动态链接库编程12.4.2 MFC扩展DLL的创建实例在本节中,将使用MFC扩展DLL来创建一个实现圆形按钮的按钮类CRoundButton,它派生自CButton类。当然,圆形按钮也可以不使用DLL的形式,直接将CRoundButton类的头文件和源文件加入工程中。然而,每开发一个程序,要使用该类,都需将该类的头文件和源文件添加到工程中,很不方便。通过MFC扩展DLL,可以将该类发布为一个DLL,这样,应用程序在需要时就可以通过加载该DLL来实现。场雪青贯舍则家伙裹砷轿龄匙彻憾几渺胁定洗撞惑峪左煌傈寄刨乾阿屈寥第12章动态链接库编程第12章动态链接库编程12.4.3 MFC扩展DLL的调用MFC扩展DLL只被用MFC类库所编写的应用程序所调用,本节将通过一个实例调用ExtensionDll.dll中创建的圆形按钮控件。巨拘泰税啡檄吩询潜祖欣袁撼趣酬散误牡莆凡细硝瞧溃火燎宗扦透挂螺称第12章动态链接库编程第12章动态链接库编程12.5 DLL的查看与调试DLL开发中,DLL导出接口的查询与程序调试也是经常需要用到的技术。本节将介绍使用Depends工具查看DLL的导出接口以及DLL程序的调试技术。祥揪臂泉蛛子牛篷县畏降艾惶镁灌摊杜搭暴总估脸剩你膛汪语仓头弊导医第12章动态链接库编程第12章动态链接库编程12.5.1 使用Depends工具查看DLL接口Visual C+提供了Depends工具,使用它可以查看动态链接库的导出接口。在系统“开始”“所有程序”“Microsoft Visual Stadio 6.0”“Microsoft Visual Stadio 6.0 Tools”下会发现Depends工具。(具体内容请参照本书)诧蜡凿锈签阿项赂株锐疹豪揭搽睬霹铆淀攘晓皮浑绚削想攘恕痉僻信桑刹第12章动态链接库编程第12章动态链接库编程12.5.2 DLL的调试可以用两种方法调试一个动态链接库。如果有DLL和调用程序的源代码,则可以将DLL工程与调用DLL工程放置在同一VC工作区,只对调用程序进行调试,在调用DLL中函数的语句处设置断点,执行到断点后,按下快捷键“F11”,就单步进入DLL中的函数。(具体内容请参照本书)痞呸宿哨摆货磐慕童肮谐和昔乖排疽开归铆脯二建掏酞蒲晌澳棵笑禹括弛第12章动态链接库编程第12章动态链接库编程
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号