Versiones de la biblioteca MFC

La biblioteca MFC está disponible en versiones que admiten el código ANSI de juego de caracteres multibyte (MBCS) y de un solo byte, así como en versiones que admiten Unicode (codificado como UTF-16LE, el juego de caracteres nativo de Windows). Cada versión de MFC está disponible como una biblioteca estática o como un archivo DLL compartido. También hay una versión de biblioteca estática de MFC más pequeña que deja fuera los controles MFC para los cuadros de diálogo, para las aplicaciones que son muy sensibles al tamaño y no necesitan esos controles. Las bibliotecas MFC están disponibles en versiones de depuración y de lanzamiento para arquitecturas compatibles que incluyen procesadores x86, x64 y ARM. Puede crear aplicaciones (archivos .exe) y DLL con cualquier versión de las bibliotecas MFC. También hay un conjunto de bibliotecas MFC compiladas para interactuar con el código administrado. Las DLL compartidas de MFC incluyen un número de versión para indicar la compatibilidad binaria de la biblioteca.

Vinculación automática de la versión de la biblioteca MFC

Los archivos de encabezado MFC determinan automáticamente la versión correcta de la biblioteca MFC que se debe vincular, en función de los valores definidos en el entorno de compilación. Los archivos de encabezado de MFC agregan directivas de compilador que dan instrucciones al enlazador para que se vincule una versión específica de la biblioteca MFC.

Por ejemplo, el archivo de encabezado AFX.H indica al enlazador que vincule la versión completa estática, estática limitada o DLL compartida de MFC; la versión ANSI/MBCS o Unicode y la versión de depuración o comercial, en función de la configuración de compilación:

#ifndef _AFXDLL
    #ifdef _AFX_NO_MFC_CONTROLS_IN_DIALOGS
        #ifdef _DEBUG
            #pragma comment(lib, "afxnmcdd.lib")
        #else
            #pragma comment(lib, "afxnmcd.lib")
        #endif
        #pragma comment(linker, "/include:__afxNoMFCControlSupportInDialogs")
        #pragma comment(linker, "/include:__afxNoMFCControlContainerInDialogs")
    #endif
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib, "nafxcwd.lib")
        #else
            #pragma comment(lib, "nafxcw.lib")
        #endif
    #else
        #ifdef _DEBUG
            #pragma comment(lib, "uafxcwd.lib")
        #else
            #pragma comment(lib, "uafxcw.lib")
        #endif
    #endif
#else
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "d.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "d.lib")
        #else
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER ".lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER ".lib")
        #endif
    #else
        #ifdef _DEBUG
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
        #else
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
        #endif
    #endif
#endif

Los archivos de encabezado de MFC también incluyen directivas para vincular todas las bibliotecas necesarias, incluidas las bibliotecas MFC, las bibliotecas Win32, las bibliotecas OLE, las bibliotecas OLE creadas a partir de ejemplos, las bibliotecas ODBC, etc.

ANSI, MBCS y Unicode

Las versiones de biblioteca ANSI/MBCS de MFC admiten juegos de caracteres de un solo byte, como ASCII y juegos de caracteres multibyte, como Shift-JIS. Las versiones de biblioteca Unicode de MFC admiten Unicode en su formato codificado con caracteres anchos UTF-16LE. Use las versiones de biblioteca ANSI/MBCS de MFC para la compatibilidad con Unicode con codificación UTF-8.

Para establecer la configuración del proyecto para usar la cadena Unicode de un solo byte, multibyte o de caracteres anchos y la compatibilidad con caracteres en el IDE, use el cuadro de diálogo Propiedades del proyecto. En la página Propiedades de configuración>General, establezca la propiedad Juego de caracteres en No establecido para usar un juego de caracteres de un solo byte. Establezca la propiedad en Utilizar juego de caracteres multibyte para usar un juego de caracteres multibyte o Utilizar juego de caracteres Unicode para usar Unicode codificado como UTF-16.

Los proyectos de MFC usan el símbolo de preprocesador _UNICODE para indicar la compatibilidad con Unicode de caracteres anchos UTF-16 y _MBCS para indicar la compatibilidad con MBCS. Estas opciones se excluyen mutuamente en un proyecto.

Convenciones de nomenclatura de biblioteca estática MFC

Las bibliotecas estáticas para MFC usan las siguientes convenciones de nomenclatura. Los nombres de biblioteca tienen el formato

uAFXcd.LIB

donde las letras que se muestran en minúsculas en cursiva son marcadores de posición para especificadores cuyos significados se muestran en la tabla siguiente:

Especificador Valores y significados
u ANSI/MBCS (N) o Unicode (U); se omite la versión sin controles MFC en los cuadros de diálogo
c Versión con controles MFC en cuadros de diálogo (CW) o sin (NMCD)
d Depuración o lanzamiento: D=Depuración; se omite el especificador para lanzamiento

Todas las bibliotecas enumeradas en la tabla siguiente se incluyen precompiladas en el directorio \atlmfc\lib para las arquitecturas de compilación admitidas.

Biblioteca Descripción
NAFXCW.LIB Biblioteca de enlace estático MFC, versión de lanzamiento
NAFXCWD.LIB Biblioteca de enlace estático MFC, versión de depuración
UAFXCW.LIB Biblioteca de enlace estático MFC con compatibilidad con Unicode, versión de lanzamiento
UAFXCWD.LIB Biblioteca de enlace estático MFC con compatibilidad con Unicode, versión de depuración
AFXNMCD.LIB Biblioteca de enlace estático MFC sin controles de cuadro de diálogo MFC, versión de lanzamiento
AFXNMCDD.LIB Biblioteca de enlace estático MFC sin controles de cuadro de diálogo MFC, versión de depuración

Los archivos del depurador que tienen el mismo nombre base y una extensión .pdb también están disponibles para cada una de las bibliotecas estáticas.

Convenciones de nomenclatura de DLL compartidas de MFC

Las DLL compartidas de MFC también siguen una convención de nomenclatura estructurada. Esto facilita saber qué DLL o biblioteca debe usar según la finalidad.

Las DLL de MFC tienen números de versión que indican compatibilidad binaria. Use las DLL de MFC que tengan la misma versión que las demás bibliotecas y el conjunto de herramientas del compilador para garantizar la compatibilidad dentro de un proyecto.

Archivo DLL Descripción
MFCversión.DLL DLL, ANSI o MBCS de MFC, versión de lanzamiento
MFCversiónU.DLL DLL, Unicode de MFC, versión de lanzamiento
MFCversiónD.DLL DLL, ANSI o MBCS de MFC, versión de depuración
MFCversiónUD.DLL DLL, Unicode de MFC, versión de depuración
MFCMversión.DLL DLL con controles de Windows Forms, ANSI o MBCS de MFC, versión de lanzamiento
MFCMversiónU.DLL DLL con controles de Windows Forms, Unicode de MFC, versión de lanzamiento
MFCMversiónD.DLL DLL con controles de Windows Forms, ANSI o MBCS de MFC, versión de depuración
MFCMversiónUD.DLL DLL con controles de Windows Forms, Unicode de MFC, versión de depuración

Las bibliotecas de importación necesarias para compilar las aplicaciones o las DLL de extensión de MFC que usan estas DLL compartidas tienen el mismo nombre base que la DLL, pero tienen una extensión de nombre de archivo .lib. Cuando se usan DLL compartidas, una biblioteca estática pequeña debe seguir vinculada con el código; esta biblioteca se denomina MFCSversión{U}{D}.lib.

Si está vinculando dinámicamente a la versión compartida de DLL de MFC, ya sea desde una aplicación o desde una DLL de extensión de MFC, debe incluir la instancia coincidente de MFCversión.DLL o MFCversiónU.DLL al implementar el producto.

Para obtener una lista de las DLL de Visual C++ que se pueden distribuir con las aplicaciones, consulte Código distribuible para Microsoft Visual Studio 2017 y el SDK de Microsoft Visual Studio 2017 (incluye utilidades y archivos BuildServer) o Código distribuible para Visual Studio 2019.

Para obtener más información sobre la compatibilidad con MBCS y Unicode en MFC, consulte Compatibilidad con los juegos de caracteres multibyte (MBCS) y Unicode.

Puede usar las bibliotecas MFC dinámicas estáticas o compartidas para crear las DLL que se pueden usar por los ejecutables MFC y no MFC. Se denominan "DLL normales" o "DLL de MFC normales", para distinguirlas de las DLL de extensión de MFC que solo se pueden usar por las aplicaciones MFC y las DLL de MFC. A veces, una DLL creada mediante bibliotecas estáticas de MFC se denomina USRDLL en referencias anteriores, ya que los proyectos DLL de MFC definen el símbolo del preprocesador _USRDLL. A veces, una DLL que usa las DLL compartidas de MFC se denomina AFXDLL en referencias anteriores, ya que define el símbolo de preprocesador _AFXDLL.

Al crear el proyecto DLL mediante la vinculación a las bibliotecas estáticas de MFC, la DLL se puede implementar sin las DLL compartidas de MFC. Cuando el proyecto DLL se vincula a las bibliotecas de importación MFCversión.LIB o MFCversiónU.LIB, debe implementar la DLL compartida de MFC coincidente MFCversión.DLL o MFCversiónU.DLL junto con la DLL. Para más información, vea DLL.

Consulte también

Temas generales de MFC