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

2023-10-27

前言

我们在使用Microsoft Visual Studio软件(也就是我们常常说的VS)时,其中项目属性中有一项叫做“MFC的使用”,里面包含有不同的设置,会影响我们所编写的程序的使用,今天我就遇到了这个情况,我们一起来总结一下,避免犯下相同的错误。

内容

昨天写了一个小程序,使用的是MFC应用程序的工程,工具的版本为VS2013,工程参数都是默认的,其中有一项设置叫做“MFC的使用”,默认设置是“在共享DLL中使用MFC”,我虽然看到了但是没有放在心上,编码期间解决了一个MFC使用多字节字符集报错的问题,此处不展开,后续再表,就这样程序编写完成,非常完美!交给了一个叫做“小闪电”的用户,然后她怀着万分激动地心情拿到公司电脑一使用,结果报错了!!!

这里写图片描述

“无法启动此程序,因为计算机中丢失mfc120.dll。尝试重新安装改程序以解决此问题。”,看到这个问题我首先想到的就是动态链接库的事情,因为我使用的是VS2013正好使用的是12.0版本的库文件,所以说应该是目标机上没有这个库,当然可以手动下载这个库文件,添加至“C:\Windows\System32”目录,但是在程序开发工程中,你无法要求所有的用户都会这样做,只能从自身找解决方法了。

当然我也仔细查了一下这个叫做“MFC的使用”的参数,它其实包括3个选项,具体如截图:

这里写图片描述

  1. 使用标准Windows库   
  2. 在共享DLL中使用MFC    
  3. 在静态库中使用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都可以执行,但是程序较大一些,其中包含必要的库文件,可以基本保证在别的机器上正常运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC 的相关文章

  • 无法在 QGLWidget 中设置所需的 OpenGL 版本

    我正在尝试在 Qt 4 8 2 中使用 QGLWidget 我注意到 QGLWidget 创建的默认上下文不显示 OpenGL 3 1 以上的任何输出 Qt wiki 有一个教程 http qt project org wiki How t
  • EF Core 返回 null 关系,直到直接访问

    我有一些如下所示的模型 public class Mutant public long Id get set Relations public long OriginalCodeId get set public virtual Origi
  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 如何在 C++ 中为指针“this”赋值

    在函数中 如何分配this一个新的价值 您可以分配对象this点于 this XY 但你不能分配直接值this this XY Error Expression is not assignable
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • DateTime.ParseExact - 为什么 yy 变成 2015 而不是 1915

    为什么 NET 假定以下年份是 2015 年 而不是 1915 年 var d DateTime ParseExact 20 11 15 dd MM yy new CultureInfo en GB 我想 它会尝试接近 但其背后是否有合理的
  • 如何从 Powerpoint 2010 导出电影?

    如何使用 MS Office PIA 主互操作程序集 或其他方式以编程方式将嵌入视频从 powerpoint 2010 导出到外部文件 在演示文稿中嵌入视频是 Powerpoint 2010 中的一项新功能 我找不到解决方案 PPTX 文件
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get

随机推荐

  • 华为od机考题目-二叉树按照中序遍历输出

    输入描述 由大小写字母 左右大括号 逗号组成的字符串 字母戴白哦一个节点值 左右括号内包含该节点 的子节点 class Node 树节点 对树结构体不了解的 可看 二叉树相关算法 https pycoder blog csdn net ar
  • TF-IDF 算法 以及 Elasticsearch中的打分

    在 elasticsearch中进行搜索的时候 会对匹配到的数据进行打分 并且按照分数进行排序 在这个打分过程中 就运用到了TF IDF算法 TF 即词频 也就是某个词在整个文档中出现的次数越高 他的评分就越高 TF 某个词出现的次数 整个
  • Base64原理和实现

    Base64 概念 Base64已经成为网络上常见的传输8bit字节的编码方式之一 一般在做数据的传输时 系统之间的报文交互都需要使用Base64对明文进行编码 然后再进行加密 最后才传输 那么Base64的作用是什么 在数据传输时经常遇到
  • SpareNet运行、学习、debug(未完持续更新中)

    悲伤的毕业设计 这是一个关于 身为小白的我 要配置一堆环境 并且要和版本号斗智斗勇 努力跑个结果的故事 运行前 bug0 遇到了can t load pcd文件的问题 后来发现是我忘了解压文件 遇到了python命令augment不对的问题
  • 数据里面的poi指的什么_如何通过短视频POI功能,获取无数流量

    什么是POI POI功能可以让企业获得独家专享的唯一地址 呈现方式就是抖音视频中的定位图标 点击图标进去 用户可以看到定位这一地址中的全部视频内容 企业通过POI页面可以向用户推荐商品 优惠券 店铺活动等 POI可以让企业和用户之间产生一个
  • 围棋人机大战属于计算机在什么方面的应用,《信息技术基础》第一章复习题库...

    第12题 智能手机 数码相机 MP3播放器等产品中一般都含有嵌入式计算机 答案 Y 第13题 现代遥感遥测技术进步很快 其功能往往远超过人的感觉器官 答案 Y 第14题 集成电路的工作速度主要取决于组成逻辑门电路的晶体管的尺寸 尺寸越小 速
  • ConcurrentHashMap在jdk1.7和jdk1.8中的不同;

    原博客 https www cnblogs com lujiango p 7580558 html http www importnew com 28263 html CouncurrentHashMap 线程安全 一 Councurren
  • Python蒙特卡洛相关变量SciPy模拟

    SciPy 的概率分布和分布拟合 简述 概率分布对随机过程进行建模并将其拟合到观测数据 SciPy 的概率分布 它们的属性和方法 通过拟合 Weibull 极值分布来模拟组件寿命的示例 一个自动化的拟合程序 从大约 60 个候选分布中选择最
  • python logging日志根据等级适配颜色

    安装模块 pip install colorlog 代码参考如下 设置下formatter即可 import logging from colorlog import ColoredFormatter formatter ColoredFo
  • C语言猜数字游戏(详解)

    使用C语言写出猜数字游戏 1 思路 1 我们需要电脑生成一个随机数 2 玩家进行猜数字 3 玩过一次可以再玩一次 那么至少要进去一次 可以使用do while循环 2 大体结构 主函数 使用do while循环 使游戏至少进入一次 然后根据
  • uniapp基于阿里图标库引入彩色的图标iconfont

    1 进入阿里巴巴矢量图标库链接 https www iconfont cn 添加图标到项目 然后下载至本地 2 对下载的文件进行解压 命令行进入解压后的文件下 执行一下命令 全局安装iconfont tools工具 npm install
  • Android编程权威指南第3版 简单的项目作业

    文章目录 前言 1 要求描述 2 MainActivity java 3 InfoActivity java 4 activity info xml 5 activity main xml 6 strings xml 7 AndroidMa
  • Hbase学习笔记(二)——安装与部署

    Hbase 安装与部署 一 安装包 二 修改配置文件 三 分发给其他机器 四 配置环境变量 五 Hbase的启动 一 安装包 hbase 1 2 0 cdh5 14 0 tar gz 二 修改配置文件 配置文件所在位置 cd export
  • 2020美赛MCM/ICM参赛及获奖分析

    文章目录 一 美赛简介 二 参赛队伍数分析 三 选题及获奖情况 四 完整获奖名单pdf 一 美赛简介 美赛 是美国大学生数学建模竞赛的缩写 包括MCM The Mathematical Contest in Modeling数学建模竞赛 和
  • PhpStorm内置的REST客户端 使用方法

    http confluence jetbrains com display PhpStorm Built in REST Client in PhpStorm 跳到元数据结束 由Maarten Balliauw创建 最后由米哈伊尔 温克于2
  • Android之团队开发时高德/百度地图出现INVALID_USER_SCODE

    初次集成前端地图 高德 百度 的同志都可能会遇到INVALID USER SCODE提示 虽然基础地图功能没有影响 但是这个提示直接Toas给用户的 真是够了 如果集成地图导航时可能因为该原因无法打开导航页面 那么我们就研究下为啥出现这个I
  • jQuery实现静态html+ajax请求访问MySQL数据库并显示

    文章目录 静态html ajax与jsp ajax访问流程图 前期准备 配置jQuery 准备index html 准备dao 准备servlet jQuery实现ajax 附 关于Maven项目引入js无法使用的问题 静态html aja
  • Java并发编程与高并发解决方案(精选)

    Java并发编程与高并发面试 一 课程准备 1 1 课程导学 本课程主要是围绕并发编程和高并发解决方案两个核心来进行讲解 希望这门课程能够带领大家攻克并发编程与高并发的难题 课程特点 大量的图示及代码演示 全面覆盖并发知识点 建立完整的知识
  • 计算机操作系统的启动与加载过程

    注 uboot 嵌入式系统的bootloader 包含了BIOS的功能 相当于PC机的BIOS 引导程序
  • MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC

    前言 我们在使用Microsoft Visual Studio软件 也就是我们常常说的VS 时 其中项目属性中有一项叫做 MFC的使用 里面包含有不同的设置 会影响我们所编写的程序的使用 今天我就遇到了这个情况 我们一起来总结一下 避免犯下