2009-07-28 35 views

Respuesta

10

Siempre he comprobado que se haya definido el símbolo _MFC_VER.

Este es el número de versión de MFC que se utilizan 0x0700 = 7,0

Es en el "predefinidas macros" en MSDN

0

El símbolo _AFX se define típicamente para proyectos de MFC.

+0

Pensé que también muhc, pero cuando se habilita "Usar MFC en una biblioteca dinámica" para un proyecto de Biblioteca Win32 (que se creó sin la opción 'Compatibilidad con MFC'), esta macro no está definida. – peterchen

+0

Como dijo @peterchen, _AFX no está definido si MFC como la opción de biblioteca dinámica está activa, sino _AFXDLL en su lugar. – Mouze

3

tengo comprobar en Visual Studio 2013, en un proyecto original centrarse exclusivamente en Win32 consola, así que tengo que agregar compatibilidad con MFC (sin usar el Asistente de proyectos) en una segunda vez. Los siguientes son mis conclusiones:

  • El _MFC_VER macro se define en el afxver_.h, incluido por afx.h. Entonces, si no incluye afx.h directa/indirectamente en su archivo .cpp, no tiene definida la macro _MFC_VER. Por ejemplo, incluir en un proyecto una fuente .cpp que no incluya afx.h, el archivo se compilará SIN la definición de macro _MFC_VER. Por lo tanto, es inútil adaptar el código de C++ (una biblioteca externa, por ejemplo) para detectar el uso de la biblioteca de MFC y, opcionalmente, admitir la biblioteca de MFC.

  • Si se activa de forma manual en el uso de MFC (Seleccione el proyecto en el Explorador de soluciones, de clic derecho, Propiedades de configuración -> General -> Uso de MFC) tiene dos posibilidades:

    • A) seleccione la opción "Usar MFC en una DLL compartida". De hecho, esto actualiza los parámetros de la línea de comandos y agrega la definición de _AFXDLL a la lista de macros del preprocesador.
    • B) seleccione la opción "Usar MFC en una biblioteca estática". Esto realmente elimina la macro _AFXDLL definida, pero no se agrega ninguna definición de macro, por lo que nada puede decirle si realmente se usa MFC.

Así, durante mi actividad de prueba, sólo el modo A se puede utilizar con eficacia para entender si la biblioteca MFC se incluye o no en el proyecto bajo construcción.

Mantengo una biblioteca multiplataforma en C++ que admite muchas plataformas (Mac OSx, consola WinX, WinX MFC, iOS, Unix, Android) y la habilitación de MFC con DLL dinámico es la única forma de detectar de forma transparente la presencia de MFC. Así, por ejemplo:

#if defined(_AFXDLL) 
# include <afx.h> 
#endif 

Obviusly, puede añadir manualmente una definición de macro (_AFX) en la lista preprocesador proyecto.

Cuestiones relacionadas