当前位置: 首页 > news >正文

【VC++DLL动态链接库编程】DLL动态链接库的原理讲解(2)

动态链接库编程之基础概念

DLL(Dynamic Linkable Library)的概念

  • 你可以简单的把DLL看成一种仓库,它提供你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库 -- 静态链接库 -- 动态链接库”的时代。
  • 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。
  • 静态库中不能再包含其他的动态链接库或者静态链接库,但是动态链接库是可以包含其他的动态或静态链接库。

对于动态链接库,还需要建立如下概念:

(1)DLL的编制与具体的编程语言及编译器无关
只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以互相调用。譬如Windows提高的系统DLL(其中包含了Windows的API),在任何开发环境中都能被调用,不在乎其是Visual Basic、Visual C++还是Delphi。

(2)动态链接库随处可见
我们在Windows目录下的system32文件中会看到kernel32.dll、user32.dll和gdi32.dll。Windows的大部分API都包含在这些DLL中。kernel32.dll中的函数主要处理内存管理和进度调度;usr32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。
一般的程序都用过类似MessageBox的函数,其实它包含在user32.dll这个动态链接库中。由此可见DLL对我们来说其实并不陌生。
(3)VC动态链接库的分类
Vsiual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库),MFC Regular DLL(MFC规则DLL),MFC Extension DLL(MFC扩展DLL)。

非MFC动态库采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用:MFC规则DLL,包含一个继承自CWinApp的类,但其无消息循环:MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。

相关文章:

  • 【VC++DLL动态链接库编程】VC++静态库编译(3)
  • 【VC++DLL动态链接库编程】DLL动态链接库创建(4)
  • 【VC++DLL动态链接库编程】教程目录(1)
  • 【人脸检测】Adaboost+Haar目录
  • 【python】List与string转化--test_veh.py代码
  • 临时需要用的网址 caffemodel
  • 【tensorflow学习笔记001】开篇:以实例了解tensorflow的运行与下载安装
  • 【深度学习:CNN】过拟合、梯度弥散、batchsize的影响的问题
  • 【深度学习:CNN】误差分析
  • 【深度学习:CNN】利用随机前馈神经网络生成图像观察网络复杂度
  • 【caffe使用记录】caffe的train和test网络model
  • 【tensorflow1.0学习笔记002】tensorflow中的概念
  • 【tensorflow1.0学习笔记003】构造神经网络与结果可视化代码
  • 【tensorflow1.0学习笔记004】TensorBoard可视化助手
  • 【tensorflow1.0学习笔记005】dropout解决overfitting
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • C++11: atomic 头文件
  • java第三方包学习之lombok
  • js正则,这点儿就够用了
  • Node + FFmpeg 实现Canvas动画导出视频
  • Shadow DOM 内部构造及如何构建独立组件
  • SSH 免密登录
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 创建一个Struts2项目maven 方式
  • 你真的知道 == 和 equals 的区别吗?
  • 嵌入式文件系统
  • 项目实战-Api的解决方案
  • 一个完整Java Web项目背后的密码
  • nb
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Java数据解析之JSON
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • #HarmonyOS:Web组件的使用
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)球球大作战
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (备忘)Java Map 遍历
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (转)大道至简,职场上做人做事做管理
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net的C#语言取月份数值对应的MonthName值
  • .net经典笔试题
  • .net知识和学习方法系列(二十一)CLR-枚举
  • ??javascript里的变量问题
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @RestController注解的使用
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [BZOJ]4817: [Sdoi2017]树点涂色