




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
vc 动态链接库和静态链接库1背景软件开发基于模块化开发的理念,可以提高代码重用性、便于模块的测试和模块功能的维护扩充、缩短开发周期。模块化开发在设计上的体现是模块功能的划分和模块之间内聚性、耦合性的设计。在开发技术上的体现主要是动态链接库和静态链接库的设计。因为设计上功能需要和开发的项目密切联系,本文不加讨论。本文主要介绍在开发技术上的体现:即介绍动态链接库和静态链接库。2概念和区别不论是动态链接库还是静态链接库,都是对代码封装编译生成的功能模块,这类模块不能单独执行,需要有exe执行文件调用。其代码也不可见,留有功能接口,供二次开发人员使用。示意图如下:上图只是简单的架构示意图,实际根据链接库的不同,调用方法也不同。下面分别对静态和动态链接库做简单介绍。2.1静态链接库静态链接库的后缀名一般是.lib文件,如果你的可执行程序调用了静态链接库,那么编译后静态链接库中的代码就要链接到你的可执行程序中去,成为你可执行程序的一部分。所以调用了静态连接的可执行文件一般比较大一些。2.2动态链接库动态链接库是相对于静态链接库而言的,动态链接库文件的扩展名一般是dll,也有可能是drv、sys等。如果一个应用程序使用了动态链接库,Win32系统保证内存中只有DLL的一份复制品,这是通过内存映射文件实现的。DLL首先被调入Win32系统的全局堆栈,然后映射到调用这个DLL的进程地址空间。Visual C+支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则(常规)DLL)、MFC Extension DLL(MFC扩展DLL)。非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用(比如被vb、delphi调用);MFC规则DLL 包含一个继承自CWinApp的类,无消息循环,可以导出函数,单不能导出类,可以被其他编成语言使用。MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。2.3动态链接库和静态链接库的区别静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。3 静态链接库的创建、发布及调用3.1静态链接库的创建在静态库中,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C+的编译器在处理程序代码时将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为静态链接,此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。Vc中创建静态链接库步骤如下:1、选择菜单:File-New,打开New对话框。2、选择projects属性页,左边列表中选择 win32 static library,然后再右边的project name中输入工程名称、在location中输入路径,如下图:点ok,进入下一步,选择合适的选择,既可以完成该工程框架。3、在该工程的头文件和代码文件中加入需要的功能,编译后就可以得到静态链接库文件(mathlib.lib)。3.2 静态链接库的发布静态链接库编译成功后,如果让其他开发人员使用,最少需要提供2个文件,即静态库的头文件和静态库lib文件。当然,成熟的静态库还应该提供说明文件(包含开发人员、日期、库功能介绍及库对外的接口等),以方便二次开发人员使用。3.3 静态链接库的调用要调用静态链接库,前提条件是必须先拥有库文件(.lib)和头文件,具体使用方法如下:方法1:把库文件加入到当前工程中,在使用库中功能的代码文件中加入其头文件既可以调用库中的函数。方法2:项目设置中引用.lib,project-setting-link-object/library modules中添加.lib,在使用库中功能的代码文件中加入其头文件既可以调用库中的函数。方法3:在使用库中功能的代码文件中加入其头文件,并且在加入语句:#pragma comment(lib,.binmathlib.lib),保证路径正确,然后既可以调用库中函数。因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况。4 动态链接库的创建、发布及调用。4.1 动态链接库的创建动态链接库创建(nomfc)4.2 动态链接库的发布4.2 动态链接库的调用对于动态链接库:动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。首先我们必须先注意到DLL内的函数分为两种: (1)DLL 导出函数,可供应用程序调用; (2)DLL 内部函数,只能在 DLL 程序使用,应用程序无法调用它们。因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。因此这里衍生出两个问题:第一:如何调用?即调用的方式第二:不同调用方式对应的库的生成过程和调用规则我逐步展开问题。第一,存在两种调用方式动态调用和静态调用第二,两种调用方式的库的生成过程和调用规则1动态调用生成库的.h头文件中的声明格式如下:extern C 函数返回类型 _declspec(dllexport) 函数名(参数表);在调用程序的.cpp源代码文件中按如下流程调用:在main函数代码的开始处定义需要的DLL模块的句柄和此DLL模块模块中需要调用的函数的函数指针。定义好后紧接着就是标准的三部曲:取得需要的DLL模块-返回模块句柄LoadLibrary(DLL模块路径)取得需要的函数地址返回函数指针GetProcAddress(模块句柄,函数名)从内存中卸载DLL模块FreeLibrary(模块句柄)2静态调用在调用程序的.cpp源代码文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年酒、饮料及精制茶制造人员高分题库附参考答案详解(能力提升)
- 2025年大学华文教育专业题库- 教育资源的优化利用与华文教育
- 2025年大学劳动教育专业题库- 劳动教育与大学生心理健康发展
- 2025年皮肤科皮肤病理组织切片观察试题答案及解析
- 2025年有限空间作业安全考试题库:有限空间作业安全教育与培训试题
- 2025年大学科学教育专业题库- 科学教育专业的教学经验与教学方法
- 2025年大学人文教育专业题库- 人文教育与现代社会需求的契合
- 2025年大学人文教育专业题库- 大学人文教育专业的学术规划
- 2025年大学劳动教育专业题库- 劳动教育专业与产学研结合的实践
- 2025年健身教练职业技能考核试卷:儿童与孕妇健身试题
- 2025至2030中国高纯铝行业发展趋势与行业发展研究与产业战略规划分析评估报告
- 2025年期货从业资格之《期货法律法规》真题附答案详解【巩固】
- 室内装修安全生产培训课件
- 2025租房合同范本下载(可直接打印)
- 《公民意味着什么》课件
- 2025辽宁交投集团所属运营公司招聘30人考试参考题库及答案解析
- 幼儿园各项安全管理制度汇编
- 广西福泰印染有限公司年产全棉针织面料3.6万吨生产项目环境影响报告书
- 【《我国小学生课外培训现状调查及问题和建议浅析》10000字(论文)】
- 民航招飞面试常见的面试问题及答案
- 每日食品安全检查记录 (一)
评论
0/150
提交评论