将类从 MFC 移植到 C++ 控制台应用程序。使用 /MD[d](CRT dll 版本)构建 MFC 应用程序需要

Posted

技术标签:

【中文标题】将类从 MFC 移植到 C++ 控制台应用程序。使用 /MD[d](CRT dll 版本)构建 MFC 应用程序需要【英文标题】:Porting a class from MFC to a C++ Console Application . Building MFC application with /MD[d] (CRT dll version) requires 【发布时间】:2013-03-21 00:07:47 【问题描述】:

我正在尝试从基于 MFC 的应用程序中移植某些功能。显然我没有使用 MFC 的经验。我感兴趣的类继承自 CAsyncSocket。在 MSDN 上查找该类时,它指出该类派生自 afxsock.h 。当我将它添加到我的控制台应用程序代码时,我收到了以下错误消息

Error   1   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[d]  d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h

关于如何解决此问题的任何建议?

【问题讨论】:

【参考方案1】:

为了使用任何 MFC 的东西,您需要将您的程序与 MFC 链接。最简单的方法是通过项目属性。打开您的项目属性并转到“常规”。选择“使用 MFC”或者“在静态库中使用 MFC”或“在共享 dll 中使用 MFC”。尝试重新构建您的程序。之后您可能需要调整一些其他选项

【讨论】:

谢谢你能告诉我两者的区别吗? 如果您选择后者,您需要将 MFC 与您的应用程序一起分发(通过安装程序)。如果您选择前一个选项,程序二进制文件的大小会更大,但您不需要随它分发任何 dll。它可以在任何 PC 上正常工作

以上是关于将类从 MFC 移植到 C++ 控制台应用程序。使用 /MD[d](CRT dll 版本)构建 MFC 应用程序需要的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Eclipse CDT 自动将类从命名空间中取出?

尝试将控制台应用程序移植到 MFC GUI,但遇到 stdafx 问题

将类从可执行文件导出到 dll

无法将类从一个模块导入到另一个模块 - Scala

找出在 Office 2007 样式中使用 MFC 功能包时使用的颜色

将类从asType转换为类 :无法施放