MFC 使用细节

news/2024/9/21 19:19:50 标签: 学习, 笔记, mfc

MFC 使用细节

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

  1. 在共享 DLL 中使用 MFC:这种方式下,MFC DLL 的内容不会包含在您的 EXE 文件中。因此,生成的 EXE 文件较小,但运行时需要系统中有相关的 MFC DLL 文件(例如 mfc90.dll)。这意味着如果您的程序需要在没有安装 Visual Studio 的机器上运行,您可能需要在目标机器上安装相应的 MFC DLL 运行时库。这种方式的优点是减少了应用程序的大小,但缺点是增加了部署复杂性,因为需要确保运行时环境正确配置。
  2. 在静态库中使用 MFC:这种方式下,MFC DLL 的相关代码会被编译进您的 EXE 文件中。这样生成的 EXE 文件会比较大,但它不依赖于系统中是否存在 MFC DLL。这意味着您可以在没有安装 Visual Studio 的机器上运行程序,因为所有必要的 MFC 代码都包含在 EXE 文件中。这种方式的优点是简化了部署,因为您不需要担心目标机器上的运行时库。缺点是生成的 EXE 文件较大,可能会增加开发和维护的复杂性。

如果希望生成较小的 EXE 文件并且可以控制目标机器的环境,可以选择在共享 DLL 中使用 MFC。如果希望简化部署过程,或者需要在多种环境中运行程序,那么在静态库中使用 MFC 是更好的选择。

通过项目的属性设置来指定 MFC 的使用方式。在 Visual Studio 2008 中,右键点击项目,选择“属性”,然后在“常规”选项卡下找到“MFC 的使用”选项进行设置。

image

image

请注意,如果选择在静态库中使用 MFC,可能还需要调整项目的运行库设置,以确保正确链接到静态版本的 MFC 库。这通常涉及到将运行库设置为“多线程静态 (/MT)”或“多线程调试静态 (/MTd)”。这些设置也可以在项目的属性页中找到,具体路径为“C/C++” -> “代码生成” -> “运行库”。

2. “多线程静态 (/MT)”或“多线程调试静态 (/MTd)”的区别

“多线程静态 (/MT)” 和 “多线程调试静态 (/MTd)” 是两种常见的运行库设置,它们之间的区别主要在于调试支持和性能优化。

  1. 多线程静态 (/MT)

    • 这个设置链接到静态版本的 C 运行时库和 MFC 库。
    • 静态链接意味着 CRT 和 MFC 的代码会被直接包含在最终的可执行文件中,而不是在运行时从 DLL 中加载。
    • 由于代码是静态链接的,因此每个使用相同库的应用程序都会有自己的副本,这可能会导致较大的可执行文件大小。
    • 这种设置适用于发布版本的应用程序,因为它不包含调试信息,优化了性能和减小了内存占用。
    • 多线程 (/MT) 表示运行时库是为多线程应用程序设计的,提供了线程安全的支持。
  2. 多线程调试静态 (/MTd)

    • 这个设置同样链接到静态版本的 C 运行时库和 MFC 库,但包含了调试信息。
    • 调试信息允许开发者在调试过程中更好地跟踪问题,例如查看调用堆栈、变量值等。
    • 由于包含了额外的调试信息,生成的可执行文件会比 /MT 设置的文件大。
    • 这种设置适用于开发和测试阶段,因为它提供了更多的调试信息,有助于发现和修复错误。
    • 同样,多线程 (/MTd) 表示运行时库是为多线程应用程序设计的。

总结来说,/MT 和 /MTd 的主要区别在于是否包含调试信息。/MTd 用于开发和测试,提供了调试信息;而 /MT 用于发布,不包含调试信息,优化了性能和大小。在实际开发过程中,可能会在开发环境中使用 /MTd,而在发布应用程序时切换到 /MT。

在 Visual Studio 中设置运行库的方法是:

  • 打开项目属性。
  • 转到“配置属性” -> “C/C++” -> “代码生成”。
  • 在“运行库”选项中选择“多线程静态 (/MT)”或“多线程调试静态 (/MTd)”。

行库”选项中选择“多线程静态 (/MT)”或“多线程调试静态 (/MTd)”。

image


http://www.niftyadmin.cn/n/5669315.html

相关文章

kafka3.8的基本操作

Kafka基础理论与常用命令详解(超详细)_kafka常用命令和解释-CSDN博客 [rootk1 bin]# netstat -tunlp|grep 90 tcp6 0 0 :::9092 :::* LISTEN 14512/java [rootk1 bin]# ./kafka-topics.s…

Qt 构建目录

Qt Creator新建项目时,选择构建套件是必要的一环: 构建目录的默认设置 在Qt Creator中,项目的构建目录通常是默认设置的,位于项目文件夹内的一个子文件夹中,如:build-项目名-Desktop_Qt_版本号_编译器类型_…

Python语言基础教程(下)4.0

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

C++第2课——取余运算符的应用、浮点型和字符型(含视频讲解)

文章目录 1、课程笔记2、课程视频 1、课程笔记 /* #include<iostream> using namespace std; int main(){//cout<<"hello,world!";//运算符的优先级 () * / % -// 3/2 1...1 3%21 5%32 3%53 -3%2-1 3%-21//cout<<6/4%2;//int 向下取整6…

【Unity踩坑】UI Image的fillAmount不起作用

在游戏场景中&#xff0c;我们经常在界面上展示进度条&#xff0c;当然有各种形状的&#xff0c;线性的&#xff0c;长方形的&#xff0c;圆形&#xff0c;环形等等。 Unity中实现这种效果的话&#xff0c;最基本的方法说是改变Image的fillAmout属性。 如果你是初次使用UI Ima…

OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 Harris 角点检测器。 该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs&#xff0c;对于每个像素 (…

Github 2024-09-20 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10Kotlin项目1Python项目1JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache License 2.0Star…

基于mockito做单元测试

1.简介 配合断言使用(杜绝System.out)可重复执行不依赖环境不会对数据产生影响Spring的上下文环境不是必备的一般都配合mock类框架对数据库进行隔离 mock类使用场景&#xff1a; 要进行测试的方法存在外部依赖(DB,Redis,第三方接口),为了专注于对该方法的逻辑进行测试&#…