Para una biblioteca Win32 estática, ¿cómo puedo detectar que se haya configurado alguna de las opciones "Usar MFC"?Cómo detectar "Usar MFC" en el preprocesador
es decir
#ifdef ---BuildingForMFC---
....
#else
...
#endif
Para una biblioteca Win32 estática, ¿cómo puedo detectar que se haya configurado alguna de las opciones "Usar MFC"?Cómo detectar "Usar MFC" en el preprocesador
es decir
#ifdef ---BuildingForMFC---
....
#else
...
#endif
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
El símbolo _AFX
se define típicamente para proyectos de MFC.
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:
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.
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
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