2011-05-14 12 views
8

He pasado la mayor parte del día tratando de descubrir por qué ocurre este error, pero me sigue desconcertando.Visual Studio 2010 incluye MFC aunque se especifique la aplicación de consola vacía (C++)

Creé una aplicación de consola en Visual C++ y la especifiqué que estaba vacía. Después de poner todo de mi fuente en la carpeta virtual y la compilación ha producido un error:

c:\program files\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[d]

c:\program files\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[d]

c:\program files\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[d]

extraño error de hecho, porque nunca he incluido los archivos de MFC. Así que remediaba la situación especificando "/ MT" en la configuración de generación de código.

Esto funcionó bien ... hasta que decidí incluir "Windows.h", que dio lugar a este error:

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxv_w32.h(16): fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxv_w32.h(16): fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h

He intentado todo lo que podía pensar, incluyendo la recreación del proyecto con y sin encabezados precompilados, una aplicación Win32 en lugar de consola y una aplicación WxWidget. Todas estas aplicaciones aparentemente intentan incluir MFC aunque nunca lo haya especificado. ¿Alguien puede arrojar algo de luz sobre este problema? ¡Gracias!

+1

Bueno, lo que hace su mirada código como? ¿Qué encabezados estás incluyendo? ¿Puedes demostrar una reproducción mínima? –

+0

http://pastebin.com/VWsTC6vc Parece que es el problema. Estoy usando la biblioteca CMarkup para el trabajo XML. Aparentemente usa Cstrings, la curiosidad me tiene preguntando si funcionará sin MFC incluido, pero no tengo idea de cómo hacerlo. –

Respuesta

7

Averigüe lo que incluye los encabezados MFC: la opción /showIncludes puede ayudar con eso.

Lo que en el proyecto IDE página de propiedades se encuentra bajo:

C/C++ | Advanced | Show Includes 

vez que sepa quién está incluyendo ellos se puede tomar una decisión sobre la forma de abordar el problema - simplemente puede ser capaz de eliminar un errante #include , pero podría requerir descartar una biblioteca que está utilizando que depende de MFC.

+0

Una biblioteca externa, o más fuente, es el problema.Estoy rastreando cómo especificar cadenas STL frente a MFC CStrings en la biblioteca CMarkup, que es lo que estoy usando. Sin embargo, la navegación de su documentación está demostrando ser menos amigable para el desarrollador. –

+0

Problema resuelto, CMarkup era innecesariamente oscuro en el asunto. Gracias. –

+5

Puede usar 'CString' sin la biblioteca MFC usando' #include '. Microsoft rompió varias clases de utilidad de la biblioteca MFC en VS 2003 (quizás VS 2002). Si 'CString' es todo lo que CMarkup usa, debería ser un cambio fácil (casi seguro más fácil que cambiar para usar' std :: string'). –

5

Asegúrese de que 'USO de MFC' esté en la configuración 'Usar MFC en una DLL compartida'. Eso lo solucionó para mí.

2

Si se requiere MFC, establezca los siguientes valores (Depuración/Win32):

Propiedades de configuración> General:

Use of MFC : Use MFC in a Shared DLL

configuración Propiedades> C/C++> Generación de código:

Runtime Library : /MDd

Si no se requiere MFC, y solo libra de ventana estándar son necesarios, mantenga la configuración de la siguiente manera.

configuración Propiedades> General:

Use of MFC : Use Standard Windows Libraries

configuración Propiedades> C/C++> Generación de código:

Runtime Library : /MTd

Cuestiones relacionadas