动态链接库(dll)编程.ppt

动态链接库(dll)编程.ppt

ID:48119936

大小:978.31 KB

页数:61页

时间:2019-05-06

动态链接库(dll)编程.ppt_第1页
动态链接库(dll)编程.ppt_第2页
动态链接库(dll)编程.ppt_第3页
动态链接库(dll)编程.ppt_第4页
动态链接库(dll)编程.ppt_第5页
资源描述:

《动态链接库(dll)编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、VC++动态链接库(DLL)编程1.概论先来阐述一下DLL(DynamicLinkableLibrary)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。对动态链接库,需建立如下概念:(1)与具体的编程语言及编译器无关只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。譬如Windows提供的系统DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎其

2、是VisualBasic、VisualC++还是Delphi。(2)动态链接库随处可见在Windows目录下的system32文件夹中会看到kernel32.dll、user32.dll和gdi32.dll,windows的大多数API都包含在这些DLL中。kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面(MessageBox函数);gdi32.dll中的函数则负责图形方面的操作。(3)VC动态链接库的分类VisualC++支持三种DLL,它们分

3、别是非MFC动态库、MFC规则DLL、MFCExtensionDLL。非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。2.静态链接库在VC++6.0中new一个名称为libTest的staticlibrary工程,并新建lib.h和lib.cpp两个文件,lib.h和lib.cpp的源代码如下

4、://文件:lib.h#ifndefLIB_H#defineLIB_Hextern"C"intadd(intx,inty);//声明为C编译、连接方式的外部函数#endif//文件:lib.cpp#include"lib.h"intadd(intx,inty){returnx+y;}#include#include"..lib.h"#pragmacomment(lib,"..\debug\libTest.lib")//指定与静态库一起连接intmain(intargc,char

5、*argv[]) {printf("2+3=%d",add(2,3));}选择tools、options、directories、libraryfiles菜单或选项,填入库文件路径4.非MFCDLL在建立的工程中添加lib.h及lib.cpp文件,源代码如下:/*文件名:lib.h*/ #ifndefLIB_H #defineLIB_Hextern"C"int__declspec(dllexport)add(intx,inty); #endif/*文件名:lib.cpp*/ #include"lib.

6、h"intadd(intx,inty){ returnx+y; }dllCall#include #includetypedefint(*lpAddFun)(int,int);//宏定义函数指针类型intmain(intargc,char*argv[]) { HINSTANCEhDll;//DLL句柄lpAddFunaddFun;//函数指针hDll=LoadLibrary("..\Debug\dllTest.dll"); if(hDll!=NULL) {

7、addFun=(lpAddFun)GetProcAddress(hDll,"add"); if(addFun!=NULL) {intresult=addFun(2,3);printf("%d",result); }FreeLibrary(hDll); } return0; }DLL的调用和静态链接库的调用有较大差异首先,语句typedefint(*lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例add

8、Fun; 其次,在函数main中定义了一个DLLHINSTANCE句柄实例hDll,通过Win32Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll; 再次,在函数main中通过Win32Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLL中add函数的调用; 最后,应用工程使用完DLL后,在函数main中通过Win32Api函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。