前言
我们在使用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相关推荐

  1. 在共享DLL中使用MFC 和在静态库中使用MFC的区别

    win7:vc6: 使用VS2008,在项目属性中有一项MFC的使用,有三种设置:   1.使用标准Windows库  2.在共享DLL中使用MFC   3.在静态库中使用MFC  第一种顾名思义. ...

  2. MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC

    前言 我们在使用Microsoft Visual Studio软件(也就是我们常常说的VS)时,其中项目属性中有一项叫做"MFC的使用",里面包含有不同的设置,会影响我们所编写的程 ...

  3. MFC 在静态库中使用MFC,静态多线程 兼容更多windows版本避免提示缺少很多dll,安装运行库 Visual C++ Redistributable for Visual Studio

    不管动态还是静态都有可能缺dll.最安全的是安装运行库: Download Visual C++ Redistributable for Visual Studio 2015 from Officia ...

  4. VC6.0中创建和使用静态库

    一:在VC6.0中创建静态库 1, 新建一个win32 static library工程,默认"OK",然后点击"finish"即可: 2, 在此工程中添加.c ...

  5. Qt5中生成和使用静态库

    在QT中静态库的后缀名为.a,在vs中开发的静态库后缀名为.lib.QT版本为5.2.1,系统为Windows. 一. 静态库的生成 新建项目. 新建一个静态库的项目,如图1.1所示:项目名称为tes ...

  6. 【Linux命令】nm 查看动态库和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  7. 微信小程序中怎么使用阿里图标库中的图标

    我们知道,微信小程序的wxss文件中不论是背景还是图标都不能使用相对路径的,所以,以前我们可能会在css中使用阿里图标库,但是在微信小程序中使用阿里图标库,要做一些处理 阿里图标库(不会使用的底下留言 ...

  8. 【如何在IDEA中修改连接git远程库中的密码,史上最详细,建议收藏!】

    如上图所示,当我们第一次连接并记住密码之后,如果后来我们修改了gitee的登录密码,那么我们如何修改默认的密码呢? 1.打开控制面板 2.用户账户 3.管理window凭据 4.修改

  9. iOS静态库中打包图片资源

    问题描述: 最近在做一个项目,需要做一个含有图片资源得静态库.a,但是苹果提供得静态库工程无法将图片资源导入,只能通过外加.bundle文件的方式,这样在调试阶段也需要使用bundle文件,而每次更新 ...

  10. C++中.lib静态库、.dll动态库的生成及调用1

    一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...

最新文章

  1. 网传阿里一总裁 PPT 被员工拍照泄漏,新规划遭曝光
  2. Spark的RDD持久化
  3. 在Android Studio中进行代码混淆
  4. 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
  5. 牛客网暑期ACM多校训练营(第三场)H - Diff-prime Pairs
  6. 高中计算机教师招聘试题,中小学信息技术教师招聘考试真题及答案.doc
  7. 修改oracle内存大小
  8. jquery 打开服务器文件管理,javascript - 前端js如何封装一个方法或者是jQuery的插件实现点击一个按钮打开本地文件管理系统,进行上传文件...
  9. nginx的addition模块在响应的前后报文添加内容与变量的运行原理
  10. android隐式广播和显式广播是什么,在Android8.0上突破隐式广播的限制
  11. GCTF 2017 Web 补题 By Assassin [持续更新--抄大佬wp]
  12. 谷歌推出 Translatotron 2,一种没有深度伪造潜力的语音到语音直接翻译神经模型
  13. SIMCOM 常用AT指令
  14. AliCloud Duplicity
  15. 拿到外卖后秒退单,一连12天吃霸王餐的女子栽了!
  16. 达人评测 3050和3050ti有啥区别 rtx3050和rtx3050ti选哪个好
  17. root过的安卓机器,安卓机怎样root
  18. 【松岩论道】一个道理说明股市人的发展不是靠江湖式的随机跳跃分析!
  19. 计算机控制电机启动接线图,用PC机并口控制一个简单电路
  20. java webservice Fault occurred while processing.

热门文章

  1. github桌面版_桌面版Linux内核介绍
  2. python集合运算_python set集合的基本运算
  3. powerbi python词云图_Power BI 标签云可视化
  4. win10配置python_win10中的Python安装与环境配置
  5. 线性求逆元模板_专栏:ACM算法面面观[9]逆元
  6. lora信号测试小助手_LoRa技术——30个常见问题解答
  7. Mysql插入中文时错误:ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE5\x8B\x87' for column
  8. jstree取消勾选_zTree 节点勾选取消勾选 选中取消选中
  9. fastJson、Jackson对象转json串不使用驼峰方法和json转对象
  10. 白话/图示 sleep_on/wake_up的执行流程