MFC——在共享DLL中使用MFC、在静态库中使用MFC
前言
我们在使用Microsoft Visual Studio软件(也就是我们常常说的VS)时,其中项目属性中有一项叫做“MFC的使用”,里面包含有不同的设置,会影响我们所编写的程序的使用,今天我就遇到了这个情况,我们一起来总结一下,避免犯下相同的错误。
内容
昨天写了一个小程序,使用的是MFC应用程序的工程,工具的版本为VS2013,工程参数都是默认的,其中有一项设置叫做“MFC的使用”,默认设置是“在共享DLL中使用MFC”,我虽然看到了但是没有放在心上,编码期间解决了一个MFC使用多字节字符集报错的问题,此处不展开,后续再表,就这样程序编写完成,非常完美!交给了一个叫做“小闪电”的用户,然后她怀着万分激动地心情拿到公司电脑一使用,结果报错了!!!
“无法启动此程序,因为计算机中丢失mfc120.dll。尝试重新安装改程序以解决此问题。”,看到这个问题我首先想到的就是动态链接库的事情,因为我使用的是VS2013正好使用的是12.0版本的库文件,所以说应该是目标机上没有这个库,当然可以手动下载这个库文件,添加至“C:\Windows\System32”目录,但是在程序开发工程中,你无法要求所有的用户都会这样做,只能从自身找解决方法了。
当然我也仔细查了一下这个叫做“MFC的使用”的参数,它其实包括3个选项,具体如截图:
使用标准Windows库
在共享DLL中使用MFC
在静态库中使用MFC
这三种当然有着不同的意义:
第一种顾名思义,是使用WINDOWS SDK API库,不使用MFC类。话说一个MFC应用程序不使用MFC类是个什么情况,一开始我也想不通,后来我新建了一个MFC应用程序的工程,然后把这这项参数填成这一种,然后程序编译失败,具体错误如下图,这就说明问题了,如果是MFC工程必须选择第二项或者第三项,而第一项“使用标准Windows库”是为非MFC工程准备的(不知理解是否正确,请大神指教)。
第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。这就是我的程序一开始选择的选项,要求目标计算机中至少要包含“mfc120.dll”库文件,否则无法使用。
第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行。个人感觉程序测试期间使用这个选项应该比较好,起码可以保证程序的正常运行。
总结
MFC应用程序的工程,关于“MFC的使用”属性,应该选择“在共享DLL中使用MFC”或者“在静态库中使用MFC”。
“使用标准Windows库” 选项只能用在非MFC工程中,如果用在MFC工程会导致代码编译报错。
“在共享DLL中使用MFC” 选项生成的程序可执行文件比较小,但是要求目标机器必须装有必要的库文件。
“在静态库中使用MFC” 选项生成的程序可执行文件几乎所有的Windows都可以执行,但是程序较大一些,其中包含必要的库文件,可以基本保证在别的机器上正常运行。
---------------------
作者:AlbertS
来源:CSDN
原文:https://blog.csdn.net/albertsh/article/details/52838419
版权声明:本文为博主原创文章,转载请附上博文链接!
MFC——在共享DLL中使用MFC、在静态库中使用MFC相关推荐
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
win7:vc6: 使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. ...
- MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC
前言 我们在使用Microsoft Visual Studio软件(也就是我们常常说的VS)时,其中项目属性中有一项叫做"MFC的使用",里面包含有不同的设置,会影响我们所编写的程 ...
- MFC 在静态库中使用MFC,静态多线程 兼容更多windows版本避免提示缺少很多dll,安装运行库 Visual C++ Redistributable for Visual Studio
不管动态还是静态都有可能缺dll.最安全的是安装运行库: Download Visual C++ Redistributable for Visual Studio 2015 from Officia ...
- VC6.0中创建和使用静态库
一:在VC6.0中创建静态库 1, 新建一个win32 static library工程,默认"OK",然后点击"finish"即可: 2, 在此工程中添加.c ...
- Qt5中生成和使用静态库
在QT中静态库的后缀名为.a,在vs中开发的静态库后缀名为.lib.QT版本为5.2.1,系统为Windows. 一. 静态库的生成 新建项目. 新建一个静态库的项目,如图1.1所示:项目名称为tes ...
- 【Linux命令】nm 查看动态库和静态库中的符号
功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...
- 微信小程序中怎么使用阿里图标库中的图标
我们知道,微信小程序的wxss文件中不论是背景还是图标都不能使用相对路径的,所以,以前我们可能会在css中使用阿里图标库,但是在微信小程序中使用阿里图标库,要做一些处理 阿里图标库(不会使用的底下留言 ...
- 【如何在IDEA中修改连接git远程库中的密码,史上最详细,建议收藏!】
如上图所示,当我们第一次连接并记住密码之后,如果后来我们修改了gitee的登录密码,那么我们如何修改默认的密码呢? 1.打开控制面板 2.用户账户 3.管理window凭据 4.修改
- iOS静态库中打包图片资源
问题描述: 最近在做一个项目,需要做一个含有图片资源得静态库.a,但是苹果提供得静态库工程无法将图片资源导入,只能通过外加.bundle文件的方式,这样在调试阶段也需要使用bundle文件,而每次更新 ...
- C++中.lib静态库、.dll动态库的生成及调用1
一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...
最新文章
- 网传阿里一总裁 PPT 被员工拍照泄漏,新规划遭曝光
- Spark的RDD持久化
- 在Android Studio中进行代码混淆
- 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
- 牛客网暑期ACM多校训练营(第三场)H - Diff-prime Pairs
- 高中计算机教师招聘试题,中小学信息技术教师招聘考试真题及答案.doc
- 修改oracle内存大小
- jquery 打开服务器文件管理,javascript - 前端js如何封装一个方法或者是jQuery的插件实现点击一个按钮打开本地文件管理系统,进行上传文件...
- nginx的addition模块在响应的前后报文添加内容与变量的运行原理
- android隐式广播和显式广播是什么,在Android8.0上突破隐式广播的限制
- GCTF 2017 Web 补题 By Assassin [持续更新--抄大佬wp]
- 谷歌推出 Translatotron 2,一种没有深度伪造潜力的语音到语音直接翻译神经模型
- SIMCOM 常用AT指令
- AliCloud Duplicity
- 拿到外卖后秒退单,一连12天吃霸王餐的女子栽了!
- 达人评测 3050和3050ti有啥区别 rtx3050和rtx3050ti选哪个好
- root过的安卓机器,安卓机怎样root
- 【松岩论道】一个道理说明股市人的发展不是靠江湖式的随机跳跃分析!
- 计算机控制电机启动接线图,用PC机并口控制一个简单电路
- java webservice Fault occurred while processing.
热门文章
- github桌面版_桌面版Linux内核介绍
- python集合运算_python set集合的基本运算
- powerbi python词云图_Power BI 标签云可视化
- win10配置python_win10中的Python安装与环境配置
- 线性求逆元模板_专栏:ACM算法面面观[9]逆元
- lora信号测试小助手_LoRa技术——30个常见问题解答
- Mysql插入中文时错误:ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE5\x8B\x87' for column
- jstree取消勾选_zTree 节点勾选取消勾选 选中取消选中
- fastJson、Jackson对象转json串不使用驼峰方法和json转对象
- 白话/图示 sleep_on/wake_up的执行流程