区别:Use MFC In A Shared DLL 和 Use MFC In A Static Library

摘自:Programming Windows with MFC, 2nd Edition

Choosing Use MFC In A Shared DLL minimizes your application‘s executable file
size by allowing MFC to be accessed from a DLL. If you choose Use MFC In A Static
Library instead, Visual C++ links MFC code into your application‘s EXE file and the
file size grows considerably. Static linking uses disk space less efficiently than
dynamic linking because a hard disk containing 10 statically linked MFC
applications contains 10 copies of the same MFC library code. On the other hand,
an application that is statically linked can be run on any PC, whether or not the
MFC DLL is present. It‘s your call whether to link to MFC statically or dynamically,
but remember that if you distribute a dynamically linked EXE, you‘ll need to
distribute the DLL that houses MFC, too. For a release-build MFC application
created with Visual C++ version 6, that DLL is named Mfc42.dll if the program
uses ANSI characters and Mfc42u.dll if it uses Unicode characters.

时间: 2024-10-25 10:42:08

区别:Use MFC In A Shared DLL 和 Use MFC In A Static Library的相关文章

Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version

错误提示:Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version 出现以上情况 解决方法 在 项目/属性/常规/use of MFC 选项中选择 Use MFC in a Shared DLL 编译后通过.

MFC程序加载DLL文件时运行到Loadlibray()语句就无法继续下去

我在学习Detour时,为了进行测试,就建立了一个DLL文件和一个MFC工程. 但是我的MFC程序加载DLL文件时运行到Loadlibray("XXX.dll")这条语句就无法继续下去,没有报错,VS2010也没有停止,还是处于编译运行状态. 可是我之前加载的别的DLL文件都可以运行,这应该是很简单的加载DLL文件的过程呀,就想是dll文件的代码错误?或是MFC工程错误?还是Dll工程错误? 于是 我就将dll内的代码 复制到原来可以运行的DLL文件中发现可以运行,那就是代码没错, 接

Use MFC in a Static Library 和 use MFC in a Shared

在这个选项上什么时候选哪个? 如果选择use MFC in a Shared DLL 的话,你编译后的程序中不包含MFC库,所以文件会比较小,但是如果你的程序直接移到一个没有安装过MFC的机器上时,可能会导致找不到MFC的DLL. 如果选择Use MFC in a Static Library ,那你编译后的程序就直接包含了调用MFC的部分的库,文件可能会大一些,但是可以直接移到其他机器上运行. 前者是静态链接,发布不用带MFC的DLL文件.    后者是动态连接,发布要带MFC得DLL文件.如

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

使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件. 第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行. 同时,如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误: “无法启动程序……,由于

fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC sha

调试程序时出现以下问题:d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD

MFC 关于动态库DLL引用CDialog的关键点

,在MFC的应用开发中,经常会遇到将部分功能以DLL动态库的方式进行封装调用,在调用的过程中应注意以下几点 1 设置当前资源句柄 在DLL中查找资源文件时,如需要将当前资源文件的handle设置成dll模块的hinstance. AfxGetResourceHandle() 查看当前资源句柄 AfxSetResourceHandle() 设置当前资源句柄 GetModuleHandle(“dll文件名”); 例示: HINSTANCE h1 = AfxGetResourceHandle(); H

WIN32 DLL中使用MFC

最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记 一.修改预编译头文件(stdafx.h) 在stdafx.h文件中添加下面代码,包含一些MFC的头文件,这些可以在一个MFC工程中复制过来 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将为显式的 #include <afxwin

VS2017编译错误:#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

先选择“解决方案管理器”, 然后按如下路径: 项目->属性->C/C++->代码生成->运行库, 将“多线程调试DLL(/MDd)”改成“多线程(/MT)”或“多线程调试(/MTd)”. 原文地址:https://www.cnblogs.com/ming-4/p/11897927.html

MFC exe使用C++ dll中的std::string 崩溃

VC6中 MFC exe中 new 纯C++ dll dll 崩溃 我把纯C++的 dll,用/MTd 换成/MDd,就可以了 版权声明:本文为博主原创文章,未经博主允许不得转载.