Compartir a través de


Versiones de la biblioteca MFC

La biblioteca MFC está disponible en versiones que admiten código de juego de caracteres de un solo byTE y multibyte (MBCS) anSI, así como 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 los controles MFC para los diálogos, para las aplicaciones que son muy sensibles al tamaño y no necesitan esos controles. Las bibliotecas de MFC están disponibles tanto en versiones de depuración como en versiones de versión para arquitecturas compatibles que incluyen procesadores x86, x64 y ARM. Puede crear aplicaciones (archivos.exe) y dll con cualquier versión de las bibliotecas de MFC. También hay un conjunto de bibliotecas MFC compiladas para interactuar con código administrado. Los archivos DLL compartidos de MFC incluyen un número de versión para indicar la compatibilidad binaria de la biblioteca.

Vinculación automática de versiones de biblioteca de MFC

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

Por ejemplo, AFX. El archivo de encabezado H indica al enlazador que vincule en la versión completa estática, estática limitada o dll compartida de MFC; VERSIÓN ANSI/MBCS o Unicode; y depuración o versión 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 en todas las bibliotecas necesarias, incluidas las bibliotecas de MFC, las bibliotecas Win32, las bibliotecas OLE, las bibliotecas OLE compiladas a partir de ejemplos, bibliotecas ODBC, etc.

ANSI, MBCS y Unicode

Las versiones de biblioteca ANSI/MBCS de MFC admiten conjuntos 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 que use la compatibilidad de caracteres y cadenas Unicode de un solo byte, multibyte o caracteres anchos en el IDE, use el cuadro de diálogo Propiedades del proyecto . En la página Propiedades> de configuraciónGeneral, establezca la propiedad Juego de caracteres en No establecer para usar un juego de caracteres de un solo byte. Establezca la propiedad en Usar conjunto de caracteres multibyte para usar un juego de caracteres multibyte o para usar un 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 con caracteres anchos UTF-16 y _MBCS para indicar la compatibilidad con MBCS. Estas opciones son mutuamente excluyentes en un proyecto.

Convenciones de nomenclatura de bibliotecas estáticas de MFC

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

uCd deAFX. 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); omitir la versión sin controles MFC en cuadros de diálogo
c Versión con controles MFC en cuadros de diálogo (CW) o sin (NMCD)
d Depurar o liberar: D=Depurar; omit el especificador para Release

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 Static-Link de MFC, versión de lanzamiento
NAFXCWD. LIB Biblioteca de Static-Link de MFC, versión de depuración
UAFXCW. LIB Biblioteca de Static-Link de MFC con compatibilidad con Unicode, versión de versión
UAFXCWD. LIB Biblioteca de Static-Link de MFC con compatibilidad con Unicode, versión de depuración
AFXNMCD. LIB Biblioteca de Static-Link de MFC sin controles de cuadro de diálogo de MFC, versión de versión
AFXNMCDD. LIB Biblioteca de Static-Link MFC sin controles de cuadro de diálogo de 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

Los archivos DLL compartidos de MFC también siguen una convención de nomenclatura estructurada. Esto facilita saber qué DLL o biblioteca debe usar para qué propósito.

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

Archivo DLL Descripción
Versión de MFC.DLL Dll de MFC, versión de VERSIÓN ANSI o MBCS
U.DLLde la versiónde MFC DLL de MFC, versión de versión Unicode
D.DLLde la versiónde MFC DLL de MFC, versión de depuración ANSI o MBCS
UD.DLLde la versiónde MFC DLL de MFC, versión de depuración Unicode
VersiónMFCM.DLL DLL de MFC con controles de Windows Forms, versión de VERSIÓN ANSI o MBCS
U.DLL de la versiónMFCM DLL de MFC con controles de Windows Forms, versión de versión Unicode
D.DLL de la versiónMFCM DLL de MFC con controles de Windows Forms, versión de depuración ANSI o MBCS
UD.DLL de la versiónMFCM DLL de MFC con controles de Windows Forms, versión de depuración Unicode

Las bibliotecas de importación necesarias para compilar aplicaciones o archivos DLL de extensión MFC que usan estos archivos DLL compartidos tienen el mismo nombre base que el archivo DLL, pero tienen una extensión de nombre de archivo .lib. Cuando se usan los archivos DLL compartidos, una biblioteca estática pequeña debe estar vinculada con el código; esta biblioteca se denominaversión MFCS{U}{D}.lib.

Si está vinculando dinámicamente a la versión dll compartida de MFC, ya sea desde una aplicación o desde un archivo DLL de extensión de MFC, debe incluir laversión de MFC coincidente.DLL o laversiónde MFC U.DLL al implementar el producto.

Para obtener una lista de archivos DLL de Visual C++ que se pueden distribuir con las aplicaciones, vea 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 conjuntos de caracteres Unicode y Multibyte (MBCS).

Puede usar las bibliotecas MFC dinámicas estáticas o compartidas para crear archivos DLL que pueden usar los ejecutables MFC y no MFC. Estos se denominan "dll normales" o "archivos DLL de MFC normales", para distinguirlos de los archivos DLL de extensión MFC que solo pueden usar las aplicaciones MFC y los archivos DLL de MFC. A veces, un archivo DLL compilado mediante las bibliotecas estáticas de MFC se denomina USRDLL en referencias anteriores, ya que los proyectos DLL de MFC definen el símbolo de preprocesador _USRDLL. Un archivo DLL que usa los archivos DLL compartidos de MFC a veces se denomina AFXDLL en referencias anteriores, ya que define el símbolo del preprocesador _AFXDLL.

Al crear el proyecto DLL vinculando a las bibliotecas estáticas de MFC, el archivo DLL se puede implementar sin los archivos DLL compartidos de MFC. Cuando el proyecto DLL se vincula a laversión de MFC de las bibliotecas de importación. LIB o MFCversiónU.LIB, debe implementar laversión MFC de MFC compartida de MFC correspondiente.DLL o laversiónde MFC U.DLL junto con el archivo DLL. Para obtener más información, consulte DLL.

Consulte también

Temas generales de MFC