欢迎来到天天文库
浏览记录
ID:41136869
大小:261.01 KB
页数:42页
时间:2019-08-17
《《动态连接库编程》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows编程实践动态链接库库静态链接库动态链接库静态链接库动态链接库库LIBDLL静态链接库例题:建立并使用一个静态链接库步骤1.VC6中建立一个工程工程类型:VC++6.0中new一个名称为libTest的staticlibrary工程加入两个文件//文件:lib.h#ifndefLIB_H#defineLIB_Hextern"C"intadd(intx,inty);//声明为C编译、连接方式的外部函数#endif//文件:lib.cpp#include"lib.h"intadd(intx,inty
2、){returnx+y;}编译与应用在Debug目录下有个后缀名为.lib的文件应用要点:需要包含.h文件需要链入.lib文件:两种方法1.#pragmacomment(lib,"..\debug\libTest.lib")2.Project-Setting中设置什么是库库不是个怪物,编写库的程序和编写一般的程序区别不大,只是库不能单独执行;库提供一些可以给别的程序调用的函数等,别的程序要调用它必须以某种方式指明它要调用之。动态链接库与静态链接库在编写和调用上的不同体现在库的外部接口定义及调用方式略有
3、差异。动态链接库动态链接库DLL简介简单DLL的开发DLL的使用MFCDLL的开发动态链接库(DLL)简介什么是动态链接库(1)动态链接库(DynamicLinkLibrary)是Windows的重要组成部分之前学习的windows可执行程序都是exe程序,但Windows系统中动态链接库是数量最多的可执行程序KERNEL32.DLL、USER32.DLL和GDI32.DLL、各种驱动程序文件如KEYBOARD.DRV、SYSTEM.DRV和MOUSE.DRV和显卡及打印机驱动程序都是动态链接库动态链接库是其它
4、应用程序在执行时能够动态链接和调用的一组服务或函数可以利用VisualStudio自带的Depends.exe工具来查看与应用程序关联的所有DLL文件什么是动态链接库(2)在程序开发中,将各种目标模块(.OBJ)、执行时期链接库(.LIB)文件,以及经常是已编译的资源(.RES)文件连结在一起,以便建立Windows的.EXE文件,称为“静态链接”“动态链接”是指Windows程序把一个模块中的函数调用链接到动态链接库模块中的实际函数上动态链接与静态链接的区别:动态链接是在程序运行时完成,静态链接在编译时完成动
5、态链接库是一种能够实现动态链接的技术函数模块Windows程序静态链接动态链接Windows程序函数模块动态链接库动态链接库的意义使用动态链接产生的exe文件比静态链接产生的exe文件小得多使用动态链接的程序比相应静态链接程序具有更优化的内存使用可以实现函数模块的二进制重用,多个应用程序可以共享动态链接库,动态链接库也可以调用其它动态链接库在程序开发时函数模块可以独立开发通过替换动态链接库,可以实现应用程序功能的升级共享动态链接库Windows程序B函数模块动态链接库Windows程序A动态链接库B函数模块动态
6、链接库动态链接库A利用动态链接库实现软件升级Windows程序函数模块动态链接库V1.0函数模块动态链接库V2.0覆盖升级之后升级之前简单DLL的开发基本步骤建立DLL工程编写函数模块产生动态链接库程序在其它项目中使用动态链接库分类普通的Win32的DLL直接用C、C++编写,不适用于MFC类基于MFC的DLL应用MFC类库编写建立DLL工程新建项目时选择DLL程序DllMain工程建好之后,默认代码如下:BOOLWINAPIDllMain(HMODULEhModule,DWORDul_reason_for_c
7、all,LPVOIDlpReserved){returnTRUE;}DllMain的作用DllMain是动态链接库的执行入口,第一次执行dll时被调用DllMain主要用于dll调用时初始化,以及dll退出时的清理工作例如:在dll调用时初始化一些全局变量,在dll退出时销毁这些全局变量通常情况下可以不编写DllMain编写函数模块(1)为一个函数加上extern“C”__declspec(dllexport)就可以将函数导出为dll函数模块例如:extern"C"__declspec(dllexport)in
8、tadd(inta,intb){returna+b;}extern"C"__declspec(dllexport)voidmessage(LPCTSTRtext){MessageBox(NULL,text,TEXT("消息"),MB_OK);}编写函数模块(2)如果使用C语言编写DLL,可以将extern“C”去掉变为:__declspec(dllexport)intadd(inta,
此文档下载收益归作者所有