即使指定了空控制台应用程序,Visual Studio 2010也包含MFC(C++)

Dr.*_*nja 8 mfc visual-studio-2010 visual-c++

我花了大部分时间试图弄清楚为什么会出现这种错误,但这仍然让我感到困惑.

我在Visual C++中创建了一个控制台应用程序,并将其指定为空.将我的所有源代码放入虚拟文件夹并编译后发生错误:

c:\ program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24):致命错误C1189:#error:使用/ MD建立MFC应用程序[d](CRT dll版本)需要MFC共享dll版本.请#define _AFXDLL或不要使用/ MD [d]

c:\ program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24):致命错误C1189:#error:使用/ MD建立MFC应用程序[d](CRT dll版本)需要MFC共享dll版本.请#define _AFXDLL或不要使用/ MD [d]

c:\ program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24):致命错误C1189:#error:使用/ MD建立MFC应用程序[d](CRT dll版本)需要MFC共享dll版本.请#define _AFXDLL或不要使用/ MD [d]

确实存在奇怪的错误,因为我从未包含任何MFC文件.所以我通过在代码生成设置中指定"/ MT"来纠正这种情况.

这很好用......直到我决定包含"Windows.h",它产生了这个错误:

c:\ program files\microsoft visual studio 10.0\vc\atlmfc\include\afxv_w32.h(16):致命错误C1189:#error:WINDOWS.H已包含在内.MFC应用程序不能#include windows.h

c:\ program files\microsoft visual studio 10.0\vc\atlmfc\include\afxv_w32.h(16):致命错误C1189:#error:WINDOWS.H已包含在内.MFC应用程序不能#include windows.h

我已经尝试了我能想到的一切,包括使用和不使用预编译头文件重新创建项目,Win32应用程序而不是控制台,以及WxWidget应用程序.所有这些应用程序似乎都试图包含MFC,即使我从未指定过.任何人都可以解释这个问题吗?谢谢!

Mic*_*urr 7

找出包含MFC标头的内容 - 该/showIncludes选项可能对此有所帮助.

在IDE项目属性页面中的哪个位于:

C/C++ | Advanced | Show Includes
Run Code Online (Sandbox Code Playgroud)

一旦你知道谁包含它们你就可以决定如何解决问题 - 你可能只是能够删除一个错误#include,但它可能需要抛弃你正在使用的依赖于MFC的库.

  • 通过使用`#include <atlstr.h>`,可以在没有MFC库的情况下使用`CString`.微软在VS 2003中推出了MFC库中的几个实用程序类(可能是VS 2002).如果`CString`就是CMarkup所使用的,那么它应该是一个简单的改变(几乎肯定比改变使用`std :: string`更容易). (5认同)

小智 5

确保"在共享DLL中使用MFC"设置中的"使用MFC".这为我解决了这个问题.