Partilhar via


Versões da Biblioteca MFC

A Biblioteca MFC está disponível em versões que suportam código ANSI de byte único e conjunto de caracteres multibyte (MBCS), bem como versões que suportam Unicode (codificado como UTF-16LE, o conjunto de caracteres nativo do Windows). Cada versão do MFC está disponível como uma biblioteca estática ou como uma DLL compartilhada. Há também uma versão menor da biblioteca estática MFC que deixa de fora os controles MFC para caixas de diálogo, para aplicativos que são muito sensíveis ao tamanho e não precisam desses controles. As bibliotecas MFC estão disponíveis nas versões de depuração e lançamento para arquiteturas suportadas que incluem processadores x86, x64 e ARM. Você pode criar aplicativos (arquivos.exe) e DLLs com qualquer versão das bibliotecas MFC. Há também um conjunto de bibliotecas MFC compiladas para interface com código gerenciado. As DLLs compartilhadas do MFC incluem um número de versão para indicar a compatibilidade binária da biblioteca.

Vinculação automática de versões da biblioteca MFC

Os arquivos de cabeçalho MFC determinam automaticamente a versão correta da biblioteca MFC a ser vinculada, com base nos valores definidos em seu ambiente de compilação. Os arquivos de cabeçalho MFC adicionam diretivas de compilador instruindo o vinculador a vincular em uma versão específica da biblioteca MFC.

Por exemplo, o arquivo de cabeçalho AFX.H instrui o linker a vincular a versão DLL estática completa, estática limitada ou compartilhada do MFC; versão ANSI/MBCS ou Unicode; e a versão de depuração ou final, dependendo da sua configuração de build.

#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

Os arquivos de cabeçalho MFC também incluem diretivas para vincular todas as bibliotecas necessárias, incluindo bibliotecas MFC, bibliotecas Win32, bibliotecas OLE, bibliotecas OLE criadas a partir de exemplos, bibliotecas ODBC e assim por diante.

ANSI, MBCS e Unicode

As versões da biblioteca MFC ANSI/MBCS suportam conjuntos de caracteres de byte único, como ASCII, e conjuntos de caracteres multibyte, como Shift-JIS. As versões da biblioteca MFC Unicode suportam Unicode em sua forma codificada de caracteres largos UTF-16LE. Utilize as versões da biblioteca ANSI/MBCS do MFC para suporte Unicode em codificação UTF-8.

Para definir a configuração do seu projeto para usar cadeia de caracteres ou suporte a caracteres Unicode de byte único, multibyte ou de largura no IDE, utilize a caixa de diálogo Propriedades do Projeto. Na páginaGeral das > de Configuração, defina a propriedade Conjunto de Caracteres como Não Definido para usar um conjunto de caracteres de byte único. Defina a propriedade para Usar conjunto de caracteres de vários bytes para usar um conjunto de caracteres de vários bytes ou para Usar conjunto de caracteres Unicode para usar Unicode codificado como UTF-16.

Os projetos MFC usam o símbolo do pré-processador _UNICODE para indicar suporte a caracteres largos Unicode UTF-16, e _MBCS para indicar suporte a MBCS. Estas opções excluem-se mutuamente num projeto.

Convenções de nomenclatura de bibliotecas estáticas MFC

As bibliotecas estáticas para MFC usam as seguintes convenções de nomenclatura. Os nomes das bibliotecas têm a forma

uAFXcd. LIB

onde as letras mostradas em itálico minúsculo são espaços reservados para especificadores cujos significados são mostrados na tabela a seguir:

Especificador Valores e significados
u ANSI/MBCS (N) ou Unicode (U); omitir para versão sem controles MFC em caixas de diálogo
c Versão com controles MFC em caixas de diálogo (CW) ou sem (NMCD)
d Depurar ou Liberar: D=Depurar; omitir especificador para Release

Todas as bibliotecas listadas na tabela a seguir estão incluídas pré-construídas no diretório \atlmfc\lib para arquiteturas de compilação suportadas.

Biblioteca Descrição
NAFXCW. LIB Biblioteca MFC Static-Link, versão de lançamento
NAFXCWD. LIB MFC Static-Link Library, Versão de Depuração
UAFXCW. LIB Biblioteca Static-Link MFC, versão de lançamento, com suporte a Unicode
UAFXCWD. LIB Biblioteca Static-Link MFC com suporte a Unicode, versão de debug
AFXNMCD. LIB Biblioteca MFC Static-Link sem controlos de diálogo MFC, Versão Release
AFXNMCDD. LIB Biblioteca MFC Static-Link sem controlos de diálogo MFC, versão de depuração

Os arquivos do depurador que têm o mesmo nome base e uma extensão .pdb também estão disponíveis para cada uma das bibliotecas estáticas.

Convenções de nomenclatura de DLL compartilhadas MFC

As DLLs compartilhadas do MFC também seguem uma convenção de nomenclatura estruturada. Isso torna mais fácil saber qual DLL ou biblioteca você deve usar para qual finalidade.

As DLLs MFC têm números de versão que indicam compatibilidade binária. Use DLLs MFC que têm a mesma versão que suas outras bibliotecas e conjunto de ferramentas do compilador para garantir a compatibilidade dentro de um projeto.

DLL Descrição
MFCversão.DLL MFC DLL, ANSI ou MBCS Versão de lançamento
MFCversãoU.DLL MFC DLL, versão Release Unicode
MFCversão D.DLL Versão de depuração MFC DLL, ANSI ou MBCS
MFCVersão UD.DLL MFC DLL, versão de depuração Unicode
VersãoMFCM.DLL DLL MFC com controles do Windows Forms, versão de lançamento ANSI ou MBCS
VersãoMFCM U.DLL DLL MFC com controles do Windows Forms, versão de lançamento Unicode
MFCMversãoD.DLL DLL MFC com controles do Windows Forms, versão de depuração ANSI ou MBCS
MFCMVersãoUD.DLL DLL MFC com controles do Windows Forms, versão de depuração Unicode

As bibliotecas de importação necessárias para criar aplicativos ou DLLs de extensão MFC que usam essas DLLs compartilhadas têm o mesmo nome base que a DLL, mas têm uma extensão de nome de arquivo .lib. Quando você usa as DLLs compartilhadas, uma pequena biblioteca estática ainda deve ser vinculada ao seu código; esta biblioteca é denominada MFCSversion{U}{D}.lib.

Se estiver a vincular dinamicamente à versão DLL partilhada do MFC, seja de uma aplicação ou de uma DLL de extensão MFC, deverá incluir a MFCversão.DLL correspondente ou a MFCversãoU.DLL ao implantar o seu produto.

Para obter uma lista de DLLs do Visual C++ que podem ser distribuídas com seus aplicativos, consulte Código distribuível para Microsoft Visual Studio 2017 e SDK do Microsoft Visual Studio 2017 (inclui utilitários e arquivos BuildServer) ou Código distribuível para Visual Studio 2019.

Para obter mais informações sobre o suporte a MBCS e Unicode no MFC, consulte Suporte a Unicode e MBCS (Multibyte Character set).

Você pode usar as bibliotecas MFC dinâmicas estáticas ou compartilhadas para criar DLLs que podem ser usadas por executáveis MFC e não-MFC. Estas são chamadas de "DLLs regulares" ou "DLLs MFC regulares", para distingui-las das DLLs de extensão MFC que só podem ser usadas por aplicativos MFC e DLLs MFC. Uma DLL criada usando as bibliotecas estáticas MFC às vezes é chamada de USRDLL em referências mais antigas, porque os projetos MFC DLL definem o símbolo do pré-processador _USRDLL. Uma DLL que usa as DLLs compartilhadas MFC às vezes é chamada de AFXDLL em referências mais antigas, porque define o símbolo do pré-processador _AFXDLL.

Quando você cria seu projeto DLL vinculando-se às bibliotecas estáticas MFC, sua DLL pode ser implantada sem as DLLs compartilhadas MFC. Quando o seu projeto DLL se vincula às bibliotecas de importação MFCversão.LIB ou MFCversãoU.LIB, deve implantar a DLL partilhada correspondente MFCversão.DLL ou MFCversãoU.DLL juntamente com a sua DLL. Para obter mais informações, consulte DLLs.

Ver também

Tópicos gerais do MFC