Dela via


MFC-biblioteksversioner

MFC-biblioteket finns i versioner som stöder ANSI enkebyte- och MBCS-teckenuppsättningar, samt versioner som stöder Unicode (kodad som UTF-16LE, den Windows-inbyggda teckenuppsättningen). Varje MFC-version är tillgänglig som ett statiskt bibliotek eller som en delad DLL. Det finns också en mindre version av MFC-statiskt bibliotek som utelämnar MFC-kontroller för dialogrutor, för program som är mycket känsliga för storlek och inte behöver dessa kontroller. MFC-biblioteken är tillgängliga i både felsöknings- och versionsversioner för arkitekturer som stöds som innehåller x86-, x64- och ARM-processorer. Du kan skapa både program (.exe filer) och DLL:er med valfri version av MFC-biblioteken. Det finns också en uppsättning MFC-bibliotek som kompilerats för att samverka med hanterad kod. De delade DLL:erna för MFC innehåller ett versionsnummer som anger binär kompatibilitet för bibliotek.

Automatisk länkning av MFC-biblioteksversioner

MFC-huvudfilerna fastställer automatiskt rätt version av MFC-biblioteket som ska länkas, baserat på värden som definierats i din byggmiljö. MFC-huvudfilerna lägger till kompileringsdirektiv som instruerar länkaren att länka i en specifik version av MFC-biblioteket.

Till exempel instruerar AFX.H-huvudfilen länkarens att länka den fullständiga statiska, begränsade statiska eller delade DLL-versionen av MFC; ANSI/MBCS- eller Unicode-version; och felsökningsversion eller driftsversion, beroende på din kompilationskonfiguration.

#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

MFC-huvudfiler innehåller också direktiv som länkar till alla nödvändiga bibliotek, inklusive MFC-bibliotek, Win32-bibliotek, OLE-bibliotek, OLE-bibliotek som skapats från exempel, ODBC-bibliotek och så vidare.

ANSI, MBCS och Unicode

MFC ANSI-/MBCS-biblioteksversionerna stöder både teckenuppsättningar med en byte, till exempel ASCII och flerbytesteckenuppsättningar, till exempel Skift-JIS. MFC Unicode-biblioteksversionerna stöder Unicode i dess UTF-16LE vid tecken kodade form. Använd ANSI/MBCS-biblioteksversionerna av MFC för UTF-8-kodat Unicode-stöd.

För att ställa in din projektkonfiguration för att använda enkla byte, flera byte eller Unicode-sträng- och teckenstöd i IDE:n, använd dialogrutan Projektegenskaper. På sidan Allmänna konfigurationsegenskaper> anger du egenskapen Teckenuppsättning till Inte inställd för att använda en teckenuppsättning med en byte. Ställ in egenskapen på Använd flerbytesteckenuppsättning för att använda en flerbytesteckenuppsättning eller använd Unicode-teckenuppsättning för att använda Unicode-kodad som UTF-16.

MFC-projekt använder förprocessorns symbol _UNICODE för att indikera UTF-16 brett tecken Unicode-support och _MBCS för att indikera MBCS-support. Dessa alternativ är ömsesidigt uteslutande i ett projekt.

Namngivningskonventioner för statiska MFC-bibliotek

Statiska bibliotek för MFC använder följande namngivningskonventioner. Biblioteksnamnen har formen

uAFXcd. LIB

där bokstäverna som visas som gemener i kursiv stil är platshållare för specifikationer vars betydelser framgår i följande tabell:

Specificerare Värden och betydelser
u ANSI/MBCS (N) eller Unicode (U); utelämna för version utan MFC-kontroller i dialogrutor
c Version med MFC-kontroller i dialogrutor (CW) eller utan (NMCD)
d Felsöka eller släppa: D=Felsök; utelämnar specificerare för release

Alla bibliotek som anges i följande tabell ingår i katalogen \atlmfc\lib för byggarkitekturer som stöds.

Bibliotek Beskrivning
NAFXCW. LIB MFC Static-Link Library, releaseversion
NAFXCWD. LIB MFC Static-Link-bibliotek, felsökningsversion
UAFXCW. LIB MFC Static-Link-bibliotek med Unicode-stöd, utgåva
UAFXCWD. LIB MFC Static-Link-bibliotek med Unicode-stöd, felsökningsversion
AFXNMCD. LIB MFC Static-Link-bibliotek utan MFC-dialogkontroller, released version
AFXNMCDD. LIB MFC Static-Link-bibliotek utan MFC-dialogkontroller, felsökningsversion

Felsökningsfiler som har samma basnamn och ett .pdb-tillägg är också tillgängliga för vart och ett av de statiska biblioteken.

MFC-konventioner för namngivning av delade DLL:er

De delade DLL:erna för MFC följer också en strukturerad namngivningskonvention. Detta gör det enklare att veta vilket DLL eller bibliotek du ska använda för vilket ändamål.

MFC-DLL:er har versionsnummer som indikerar binär kompatibilitet. Använd MFC-DLL:er som har samma version som dina andra bibliotek och kompilatorverktyg för att garantera kompatibilitet i ett projekt.

DLL Beskrivning
MFCversion.DLL MFC DLL, ANSI eller MBCS Release-version
MFC-versionU.DLL Version av MFC DLL, Unicode
MFC-versionD.DLL MFC DLL-, ANSI- eller MBCS-felsökningsversion
MFC-versionUD.DLL MFC DLL, Unicode Debug-version
MFCM-version.DLL MFC DLL med Windows Forms-kontroller, ANSI- eller MBCS-utgåva
MFCM-versionU.DLL MFC DLL med Windows Forms-kontroller, Unicode Release-version
MFCM-versionD.DLL MFC DLL med Windows Forms-kontroller, ANSI- eller MBCS-felsökningsversion
MFCM-versionUD.DLL MFC DLL med Windows Forms-kontroller, Unicode-felsökningsversion

Importbiblioteken som behövs för att skapa program eller DLL:er för MFC-tillägg som använder dessa delade DLL:er har samma basnamn som DLL-filen men har filnamnstillägget .lib. När du använder delade DLL:er måste ett litet statiskt bibliotek fortfarande vara länkat till din kod. det här biblioteket heterMFCS-versionen{U}{D}.lib.

Om du länkar dynamiskt till den delade DLL-versionen av MFC, oavsett om det är från ett program eller från ett MFC-tilläggs-DLL, måste du inkludera den matchande MFC-versionen.DLL eller MFC-versionen U.DLL när du distribuerar produkten.

En lista över Visual C++-DLL:er som kan distribueras med dina program finns i Distribuerbar kod för Microsoft Visual Studio 2017 och Microsoft Visual Studio 2017 SDK (Includes Utilities and BuildServer Files) or Distributable Code for Visual Studio 2019 (Distribuerbar kod för Visual Studio 2019).

Mer information om MBCS- och Unicode-stöd i MFC finns i Stöd för Unicode- och Multibyte-teckenuppsättningar (MBCS).

Du kan använda antingen statiska eller delade dynamiska MFC-bibliotek för att skapa DLL:er som kan användas av både MFC- och icke-MFC-körbara filer. Dessa kallas "vanliga DLL:er" eller "vanliga MFC-DLL:er", för att skilja dem från MFC-tilläggs-DLL:er som bara kan användas av MFC-appar och MFC-DLL:er. En DLL som skapats med hjälp av MFC-statiska bibliotek kallas ibland för en USRDLL i äldre referenser, eftersom MFC DLL-projekt definierar preprocessorsymbolen _USRDLL. En DLL som använder de delade DLL:erna för MFC kallas ibland för en AFXDLL i äldre referenser, eftersom den definierar symbolen för förprocessorn _AFXDLL.

När du skapar DLL-projektet genom att länka till de statiska MFC-biblioteken kan din DLL distribueras utan de delade DLL:erna för MFC. När DLL-projektet länkar till importbibliotekensMFC-version. LIB- ellerMFC-versionU.LIB måste du distribuera den matchande MFC-delade DLLMFC-versionen.DLL eller MFC-version U.DLL tillsammans med din DLL. Mer information finns i DLL:er.

Se även

Allmänna MFC-ämnen