![C++动态链接库解析_第1页](http://file4.renrendoc.com/view/4e1cb7752f91a940182a2d3df12ba748/4e1cb7752f91a940182a2d3df12ba7481.gif)
![C++动态链接库解析_第2页](http://file4.renrendoc.com/view/4e1cb7752f91a940182a2d3df12ba748/4e1cb7752f91a940182a2d3df12ba7482.gif)
![C++动态链接库解析_第3页](http://file4.renrendoc.com/view/4e1cb7752f91a940182a2d3df12ba748/4e1cb7752f91a940182a2d3df12ba7483.gif)
![C++动态链接库解析_第4页](http://file4.renrendoc.com/view/4e1cb7752f91a940182a2d3df12ba748/4e1cb7752f91a940182a2d3df12ba7484.gif)
![C++动态链接库解析_第5页](http://file4.renrendoc.com/view/4e1cb7752f91a940182a2d3df12ba748/4e1cb7752f91a940182a2d3df12ba7485.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
我学院网C++动态链接库解析一,动态链接库的基本概念DLL(DynamicLinkerLibrary)的概念可以把DLL看做是一个仓库,它提供了一些可以直接拿来用的变量,函数或者类(但是不建议从DLL中获取变量),在历史的发展中,仓库经历了从"无库-静态链接库-动态链接库”的时代。静态链接库(.lib)和动态链接库(.dll)都是共享代码的方式。如果采用了静态链接库,则无论你愿不愿意lib中的代码指令都被直接包含进了最终生成的.exe程序中。但若是使用了动态链接库,该DLL则不会被包含进.exe程序中,当.exe程序执行的时候,再"动态”的来引用或者卸载DLL。动态链接库的特点DLL文件可以被其他的语言所调用,例如。#或者Java等。譬如Window下的存在大量的DLL文件,当我们用Java编写Swing界面或者其他语言如C#等都是可以进行调用的。常见的动态链接库我学院网口我们在Window系统下面的system32文件夹中会看到Ukernel.dll、user32.dll和gdi32.dll。Window系统下的大多数API都是包含在这些DLL中。口kernel.dll中的函数主要处理内存管理和进程的调度。口user32.dll中的函数主要控制用户界面。口gdi32.dll中的函数主要负责图形方面的操作。静态链接库和动态链接库的调用说明源文件粉态库'动态库区别来自【链接阶段】如何处碧库,避妾成可执行程序u分别称为粉态翎®方式、动态疆接方式=•从上图中可以看出,静态链接库和动态链接库都是在程序的"链接"阶段进行调用的,但是静态库和动态库的链接方式是不一样的。•静态库的链接是把.lib的代码指令全部链接到最终生成的EXE程序中。•动态链接库的链接是只链接.dll文件的地址引用,因此生成的EXE程序中不包含.dll的代码指令,所以dll生成的可执行程序要比.lib生成的小很多,根据实验,一个仅包含printf的函数的生成程序,在静态链接库中需要800k,而动态链接库只需要8k左右,可以见其差100倍。院我学院网二,静态库的创建和调用静态链接库的创①创建一个Win32控制台应用程序②点击下一步我学院网③选择静态库应用程序类型,去掉预编译和安全检查后,点完成我学院网④项目创建完成后,添加MathUtils类男丑湖封擎薜御国耳实’Wdeb•也If阳采sinnqieH宜性⑤ujOD-uenAsnxoM网照煮症由陞阳为降f玛翠舞・z,■■BnqaQujejBoj^XjE」q「9|ijpalqQ9frOf6l/E/ATOE驭就61/E/AT0Eqpd-5|ijnq;BW啰q!l'S|!m甲e四ggg写哉qu僵吊君甦"沓目,■■BnqaQujejBoj^XjE」q「9|ijpalqQ9frOf6l/E/ATOE驭就61/E/AT0Euuo*uenAanxoaaA现袖A我学院网miani.cpp卡X(全局范围)搜素解沃方案资源管理器(Ctrl+;)P,#include<iostream>W解美方案miani.cpp卡X(全局范围)搜素解沃方案资源管理器(Ctrl+;)P,#include<iostream>W解美方案“TestLibDem。"(1个项目)』国TestLibDemo.寂件>略外部依赖项>■■引用nT恭件A*+mian.cpp.资敬件usingnamespacestd;I-intmain()return0;|解夭方案资源管理器5]TestLibDemo②静态连接库的调用需要引入小文件和.lib文件,因此我们把上面创建的MathUtils项目里的MathUtils.h和MathUtils.lib文件复制到TestLibDem。项目的文件夹下面,lib文件放在lib文件夹下▼修改日期Debuqlib,n,MathUtil&.h2017/3/1920:592017/3/1921:002017/3/1920:45C++Headerfilewmian.cpp2017/3/1920:57C++Souircewmian.cppOTestLibDemo.vcxproj园TestLibDemo.vcxproj.fiIters2017/3/1920:592017/3/1920:59VC++ProjectVC++ProjectFil...我学院网③在main.cpp中引入MathUtils.h头文件,并编写测试用例④我们发现我们可以调用这些方法,但是却无法创建,这是因为我们只引入了头文件,并没有指定lib文件的位置和要链接的lib文件,所以需要我们在程序"链接"过程中将.lib文件包含到程序中。首先选中项目后右击项目点击"属性",在"链接器-常规-附加库目录"这个选项里,将我们放置lib文件的目录指定出来。然后点击"输入-附加依赖项"将MathUtils.lib添加进入就可以了。我学院网我学院网⑤然后再重新运行测试程序就可以执行了我学院网^pragma,camment[lib,TIMathU3ils.lib")-in3main(}⑥还有一种非配置项目的方式链接^pragma,camment[lib,TIMathU3ils.lib")-in3main(}usingnamespacesz;d;includeusingnamespacesz;d;include<iostream>#include"MathUTils.hT,MathutilsmaThUtils;//测试求和方5去intsum=mathutils.add(1,cout«"sum=//测试最大值方法intmax=mathUtils.max(1,cout«"max我学院网3.静态链接库的总结在创建静态连接库的时候,需要注意要创建的是静态库程序,而非其他应用程序。在调用静态链接库的时候,需要准备的是头文件(.h)和静态库文件(.lib),缺一不可。然后把头文件和静态库文件放到项目的目录下,在编辑器中,在测试项目的链接器的输入栏中,指定要加载lib文件的目录。在引用lib的时候有两种,一种是编辑器方式设置,另一种是在代码中设置。三,动态链接库的创建和调用1.动态链接库的创①新建项目,这里的应用程序类型选择dll程序,选择导出符号,这样会默认为我们创建模板。我学院网②创建完成后的项目给我们包含了示例代码,包含了导出变量,导出函数,导出类。院我学院网③我们生成项目,就可以在项目下找到MyDLL.dll这个动态链接库文件。动态库的调用①我们新创建一个项目,名称为TestDLL,因为.dll是在运行时动态加载,所以需要把上一步产生的.dll文件拷贝到该运行程序的目录下。②加载动态库,并获取动态库的函数的地址,并调用。搜素解决方案资源管理器(匚些P■E解如携"Te如LL”〔1个项目}J®TestDLLT蚁件At外部敲赖项卜■■引用』T戒件Amain.cppW搜素解决方案资源管理器(匚些P■E解如携"Te如LL”〔1个项目}J®TestDLLT蚁件At外部敲赖项卜■■引用』T戒件Amain.cppW资恭件12345678910111213141516171819202122232425tinclude<iostream>//包含window的API♦include<Windows.h>usingnamespacestd;〃定F从,dll文件^入的函麴备十类型typedefint(*FnMyDLL)(void);Eintmain()//加载并获饵句柄HMODULEHdll=LcadLijorary(L,rMyDLL.dl.L,T);if(IHdll){return-1;//通过句蹄取®教的地址,并创建该函期朝类型的实例FnMyDLLfnMyDLL=(FnMyDLL)GetProcAddress(Hdll,,ffnMyDLLT,);//调用函数一intval=fnMyDLL();cout«val«endl;//勘动态库FreeLibrary(Hdll);return0;我学院
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年春八年级历史下册 第11课 城乡人民生存状态的沧桑巨变说课稿1(pdf) 川教版
- Unit 2 Understanding each other Project 说课稿-2023-2024学年高中英语牛津译林版(2020)选择性必修第四册
- Unit 6 Meet my family Part B Let's talk Let's learn大单元整体说课稿表格式-2024-2025学年人教PEP版英语四年级上册
- 2024年秋七年级生物上册 3.5.2 绿色植物的呼吸作用说课稿 (新版)新人教版001
- 葡萄园立柱施工方案
- 2023三年级数学下册 三 美丽的街景-两位数乘两位数信息窗1 美丽的街灯第2课时说课稿 青岛版六三制
- 预制水泥临时围墙施工方案
- 临时合同范例复制
- 西安电动推拉雨棚施工方案
- 2024秋一年级语文上册 汉语拼音 11 ie üe er说课稿 新人教版
- 2024美团简化版商家合作合同标准文本一
- 2025年贵州黔源电力股份有限公司招聘笔试参考题库含答案解析
- 《休闲食品加工技术》 课件 1 休闲食品生产与职业生活
- 春季开学安全第一课
- 2025年新生儿黄疸诊断与治疗研究进展
- 广东大湾区2024-2025学年度高一上学期期末统一测试英语试题(无答案)
- 课题申报书:数智赋能高职院校思想政治理论课“金课”实践路径研究
- 公司安全生产事故隐患内部报告奖励工作制度
- H3CNE认证考试题库官网2022版
- 感统训练培训手册(适合3-13岁儿童)
- 公司章程范本(完整版)
评论
0/150
提交评论