Estoy trabajando en Win32 proyecto en Visual Studio de 2011. Es la generación de MFC de error cuando me incluye afx.h o afxwin.h.
Para resolver esto, he hecho los siguientes cambios en las Propiedades del Proyecto ficha :
1) el Uso de MFC : Uso de MFC en un archivo DLL compartido
2) C++ -> Generación de Código -> Biblioteca de tiempo de ejecución -> Multi-roscado de Depuración DLL(/MDd)

Todavía me da el siguiente error al generar la solución :

1>C:\Program Files (x86)\Microsoft Visual Studio 11.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]

Mi pregunta es ¿por qué Win32 proyecto es la generación de MFC de error y cómo debo eliminar este error.Amablemente me guía.

  • Por qué no simplemente hacer lo que dice y #define _AFXDLL? C/C++, de Preprocesador, las Definiciones del Preprocesador de configuración.
  • Mira el registro de generación de archivo – asegúrese de que hay un /D _AFXDLL en la línea de comandos emitidos para la compilación. El «Uso de MFC en un archivo DLL compartido» debería provocar que suceda. Tal vez limpio/a reconstruir podría ayudar? También, VC++11 es Visual Studio 2012.
  • Gracias Hans Passant. He añadido _AFXDLL en las definiciones del Preprocesador. Pero sigue dando el mismo error.
  • ¿Cuál es el tipo de proyecto? (dll? estática lib? exe?)
  • tipo de proyecto es la dll.
  • Comprobar lo que Michael dijo: en el registro de compilación, hay un _AFXDLL? No definir de forma manual, se añade al conjunto de «Uso de MFC en un archivo DLL compartido». Si se establece a no, esto suena como un rancio preprocesados encabezado cosa. Eliminar manualmente todo lo que no es un archivo de código fuente, archivo de proyecto o de los recursos y construir de nuevo.
  • El proyecto en el que estoy trabajando tiene su propio método de construcción de una solución. Así que yo no soy capaz de verificación registro de compilación.

InformationsquelleAutor SayaliK | 2014-07-30

6 Comentarios

  1. 37

    En Visual Studio de 2011, esto funcionó para mí:

    Project -> "project" Properties -> Configuration Properties -> C/C++ -> Advanced -> Show Includes:YES(/showIncludes)

    Project -> "project" Properties -> Configuration Properties -> General -> Project Defaults -> Use of MFC :Use MFC in a shared DLL

    • ¿Alguien puede explicar por qué es esta respuesta upvoted y el otro no? «El uso de MFC en un archivo DLL compartido», añade /D «_AFXDLL» así es exactamente la misma en un más críptico (microsoft) en el camino. Y no tengo ni idea de cómo se hace /showIncudes se relacionan con el asunto…
    • No es necesario agregar el /showIncludes bandera, pero gracias por señalar el Uso de MFC configuración.
    • En el VS 2008 esta solución también funciona.
    • Además, el autor del post dice que él ya establecer las propiedades de proyecto para el uso de MFC en un archivo DLL compartido pero no se ha solucionado el error. Francamente, ninguna de las respuestas responder a la pregunta original.
    • /showIncludes imprimirá todos los archivos que están incluidos. Fuente: docs.microsoft.com/en-us/cpp/build/reference/…
  2. 12

    Tuve el mismo problema, pero sólo se resolvió cuando me di cuenta de que había que establecer el «Uso de MFC en un archivo DLL compartido» bandera para ambas configuraciones debug y release (había sólo se establece para depurar).

    • SÍ! FINALMENTE, después de un par de horas encontrado que! UGH!
  3. 5

    En mi experiencia es una de dos maneras paso.
    supongamos que Usted desea vinculación ESTÁTICA:
    a) conjunto de «Uso de MFC en una Biblioteca Estática»
    b) añadir:
    #define _AFXDLL 1
    en stdafx.h

    obras en VS 2012

  4. 1

    Luché con un problema similar. En mi caso fue causado por la configuración que se adjunta a individuo archivos cpp. Ya que contienen símbolos de preprocesador, que en realidad bloqueado el proyecto (o accesorios) nivel de configuración que utilizan símbolos de preprocesador.

    A fin de comprobar si tiene el archivo de configuración de nivel en su vcxproj. Si lo hace, comprobar si son iguales a los del proyecto a nivel de configuración. Si es así, usted puede eliminar de forma segura a ellos. Si hay diferencias, usted tiene que resolver eso.

    Cpp archivo de configuración de nivel por lo general debe estar vacío (hay algunas excepciones cuando usted los necesita), pero es bastante fácil añadir por accidente.

  5. 0

    Estaba recibiendo este error, porque yo no establecer correctamente la configuración del proyecto «Uso de MFC en un archivo DLL Compartido«. Mi error fue que me puse esta opción sólo para Liberación modo y cuando he compilado en de Depuración modo tengo este error. La aplicación de los ajustes para la Depuración & Liberación de la configuración del modo de resolver el problema para mí.

    Siguiente es la configuración:

    Proyecto -> «proyecto» Propiedades -> Propiedades de Configuración -> General> los valores Predeterminados del Proyecto -> Uso de MFC :Uso de MFC en un archivo DLL compartido

  6. -4

    Agregar el #define _AFXDLL indirectamente por un proyecto de configuración de

    • Esto es demasiado obvio desde el mensaje de error para contar como una respuesta.
    • Está usted de ser gracioso, o es en realidad una mala respuesta? Estoy tratando de trabajar a mi manera a través de llamadas gestionadas código de C++, y me temo que no es obvio. Haciendo esta definición parece funcionar, pero no sé si estoy simplemente apagar el error o si esto es en realidad este problema.
    • Ninguna explicación de por qué esto iba a cambiar nada, o cómo cambia las cosas. Si la respuesta es cambiado para reflejar que me gustaría emitir mi voto de manera diferente, pero tal y como está, repitiendo lo que ya está en el mensaje de error será suficiente, como un comentario. Un comentario que ya ha sido dejado por Hans Passant. Mi problema es con el reundancy y la falta de explicación. Nada más.

Dejar respuesta

Please enter your comment!
Please enter your name here