欢迎来到天天文库
浏览记录
ID:59560367
大小:376.00 KB
页数:18页
时间:2020-11-11
《动态链接库编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、动态链接库编程高级语言程序设计与实践一、为什么要用链接库?二、库(Library)库提供一些可以给其它程序调用的函数等:其它程序要调用它,就必须以某种方式指明它要调用之。动态链接库vs静态链接库在编写和调用上的不同体现在库的外部接口定义及调用方式略有差异。编写库的程序和编写一般的程序区别不大,只是库不能单独执行;静态链接库动态链接库LIBDLL三、静态链接库例题:建立并使用一个静态链接库步骤1.VC6中new一个名称为libTest的staticlibrary工程步骤2.加入两个文件步骤3.编译,生成lib文
2、件步骤4.使用四、动态链接库1、动态链接库(DLL)简介2、简单DLL的开发3、DLL的使用1、动态链接库(DLL)简介动态链接库(DynamicLinkLibrary)是Windows的重要组成部分动态链接库是其它应用程序在执行时能够动态链接和调用的一组服务或函数Windows系统中广泛使用动态链接库——KERNEL32.DLL、USER32.DLL和GDI32.DLL、各种驱动程序文件如KEYBOARD.DRV、SYSTEM.DRV和MOUSE.DRV和显卡及打印机驱动程序都是动态链接库(1)什么是动态链
3、接库?1、动态链接库(DLL)简介函数模块Windows程序静态链接动态链接Windows程序函数模块动态链接库(1)什么是动态链接库?1、动态链接库(DLL)简介使用动态链接产生的exe文件比静态链接产生的exe文件小得多使用动态链接的程序比相应静态链接程序具有更优化的内存使用可以实现函数模块的二进制重用,多个应用程序可以共享动态链接库,动态链接库也可以调用其它动态链接库在程序开发时函数模块可以独立开发通过替换动态链接库,可以实现应用程序功能的升级(2)动态链接库的意义?1、动态链接库(DLL)简介共享动态
4、链接库Windows程序B函数模块动态链接库Windows程序A(2)动态链接库的意义?1、动态链接库(DLL)简介动态链接库B函数模块动态链接库动态链接库A(2)动态链接库的意义?共享动态链接库1、动态链接库(DLL)简介利用动态链接库实现软件升级(2)动态链接库的意义?Windows程序函数模块动态链接库V1.0函数模块动态链接库V2.0覆盖升级之后升级之前2、简单DLL的开发分类普通的Win32的DLL直接用C、C++编写,不适用于MFC类基于MFC的DLL应用MFC类库编写基本步骤(1)建立DLL工程
5、(2)编写函数模块(3)导出动态库3、DLL的使用2、简单DLL的开发(1)建立DLL工程2、简单DLL的开发为一个函数加上“extern“C”__declspec(dllexport)就可以将函数导出为dll函数模块例如:extern"C"__declspec(dllexport)intadd(inta,intb){returna+b;}extern"C"__declspec(dllexport)voidmessage(LPCTSTRtext){MessageBox(NULL,text,TEXT("消息"
6、),MB_OK);}(2)编写函数模块2、简单DLL的开发如果使用C语言编写DLL,可以将“extern“C”去掉:__declspec(dllexport)intadd(inta,intb){returna+b;}__declspec(dllexport)voidmessage(LPCTSTRtext){MessageBox(NULL,text,TEXT("消息"),MB_OK);}如果DLL使用C++编写,通常需要加上“extern“C”。(2)编写函数模块2、简单DLL的开发导出内容可以导出函数、类、资
7、源等导出方式使用DEF文件(不常用)使用关键字__declspec(dllexport)__declspec(dllexport)函数返回值函数名(参数表)编译产生DLL(3)导出动态库3、DLL的使用(1)隐式链接(静态链接)将编译产生的dll文件、lib文件和对应的头文件,拷贝到要使用dll的项目(dllCall)的当前目录下#pragmacomment(lib,"dllTest.lib")#include"myDll.h“intmain(intargc,char*argv[]){intresult
8、=add(2,3);printf("%d",result);return0;}3、DLL的使用(2)显式链接(动态链接)通过三个API函数来实现HINSTANCEhdll;hdll=LoadLibrary(“dllname.dll”);typedefint(*lpMinFun)(int,int);//定义函数指针类型lpMinFunpmin;pmin=(lpMinFun)GetProcAddr
此文档下载收益归作者所有