Udostępnij za pośrednictwem


Wersje biblioteki MFC

Biblioteka MFC jest dostępna w wersjach, które obsługują kod ANSI jednobajtowy i wielobajtowy zestaw znaków (MBCS), a także wersje obsługujące kod Unicode (zakodowany jako UTF-16LE, zestaw znaków natywny dla systemu Windows). Każda wersja MFC jest dostępna jako biblioteka statyczna lub udostępniona biblioteka DLL. Istnieje również mniejsza wersja biblioteki statycznej MFC, która pomija kontrolki MFC dla okien dialogowych, w przypadku aplikacji, które są bardzo wrażliwe na rozmiar i nie wymagają tych kontrolek. Biblioteki MFC są dostępne zarówno w wersji debug, jak i release dla obsługiwanych architektur, które obejmują procesory x86, x64 i ARM. Możesz utworzyć obie aplikacje (pliki.exe) i biblioteki DLL z dowolną wersją bibliotek MFC. Istnieje również zestaw bibliotek MFC skompilowanych na potrzeby komunikacji z kodem zarządzanym. Udostępnione biblioteki DLL MFC zawierają numer wersji wskazujący zgodność binarną biblioteki.

Automatyczne łączenie wersji bibliotekI MFC

Pliki nagłówków MFC automatycznie określają odpowiednią wersję biblioteki MFC do dołączenia na podstawie wartości zdefiniowanych w środowisku kompilacji. Pliki nagłówkowe MFC dodają dyrektywy kompilatora, nakazując linkerowi połączyć określoną wersję biblioteki MFC.

Na przykład nagłówek AFX.H instruuje linker o włączeniu pełnej statycznej, ograniczonej statycznej lub współdzielonej wersji DLL MFC; wersji ANSI/MBCS lub Unicode; oraz wersji debug lub detalicznej, w zależności od konfiguracji kompilacji.

#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

Pliki nagłówkowe MFC zawierają również dyrektywy umożliwiające łączenie we wszystkich wymaganych bibliotekach, w tym bibliotekach MFC, bibliotekach Win32, bibliotekach OLE, bibliotekach OLE utworzonych na podstawie przykładów, bibliotek ODBC itd.

ANSI, MBCS i Unicode

Wersje biblioteki MFC ANSI/MBCS obsługują zarówno zestawy znaków jednobajtowych, jak ASCII, i zestawy znaków wielobajtowych, takie jak Shift-JIS. Wersje biblioteki MFC Unicode obsługują kodowanie Unicode w formacie UTF-16LE. Użyj wersji biblioteki ANSI/MBCS MFC dla obsługi kodowania UNICODE UTF-8.

Aby ustawić konfigurację projektu tak, aby korzystała z jednobajtowego, wielobajtowego lub szerokiego znaku Unicode i obsługi znaków w środowisku IDE, użyj okna dialogowego Właściwości projektu . Na stronie Właściwości> konfiguracjiOgólne ustaw właściwość Zestaw znaków na Nie ustaw, aby używać zestawu znaków jednobajtowych. Ustaw właściwość na użyj zestawu znaków wielobajtowych , aby użyć zestawu znaków wielobajtowych lub użyj zestawu znaków Unicode , aby użyć kodowania Unicode jako UTF-16.

Projekty MFC używają symbolu preprocesora _UNICODE, aby wskazać wsparcie dla formatu Unicode w UTF-16 oraz _MBCS, aby wskazać wsparcie dla MBCS. Te opcje wzajemnie się wykluczają w projekcie.

Konwencje nazewnictwa bibliotek statycznych MFC

Biblioteki statyczne dla MFC używają następujących konwencji nazewnictwa. Nazwy bibliotek mają formę

uAFXcd. LIB

gdzie litery pokazane w pisaniu kursywą są symbolami zastępczymi specyfikatorów, których znaczenie są wyświetlane w poniższej tabeli:

Specyfikator Wartości i znaczenie
u ANSI/MBCS (N) lub Unicode (U); pomiń, aby uzyskać wersję bez kontrolek MFC w oknach dialogowych
c Wersja z kontrolkami MFC w oknach dialogowych (CW) lub bez (NMCD)
d Debugowanie lub wersja: D=Debug; pomiń specyfikator dla wersji

Wszystkie biblioteki wymienione w poniższej tabeli są wstępnie utworzone w katalogu \atlmfc\lib dla obsługiwanych architektur kompilacji.

Biblioteka Opis
NAFXCW. LIB Biblioteka MFC Static-Link, wersja Release
NAFXCWD. LIB Biblioteka Static-Link MFC, wersja debugowania
UAFXCW. LIB Biblioteka MFC Static-Link z obsługą Unicode, wersja Release
UAFXCWD. LIB Biblioteka Static-Link MFC z obsługą standardu Unicode, wersja debugowania
AFXNMCD. LIB Biblioteka MFC Static-Link bez kontrolek dialogowych MFC, wersja wydania
AFXNMCDD. LIB Biblioteka Static-Link MFC bez kontrolek dialogowych MFC, wersja debug

Pliki debugera, które mają taką samą nazwę podstawową i rozszerzenie .pdb, są również dostępne dla każdej z bibliotek statycznych.

Konwencje nazewnictwa współdzielonej biblioteki DLL MFC

Udostępnione biblioteki DLL MFC są również zgodne ze strukturą konwencji nazewnictwa. Ułatwia to określenie, której biblioteki DLL należy używać do określonych celów.

Biblioteki DLL MFC mają numery wersji , które wskazują na zgodność binarną. Użyj bibliotek DLL MFC, które mają taką samą wersję jak inne biblioteki i zestaw narzędzi kompilatora, aby zagwarantować zgodność w projekcie.

DLL Opis
MFCwersja.DLL Wersja wydania biblioteki MFC DLL, ANSI lub MBCS
U.DLLwersjiMFC MFC DLL, wersja wydania Unicode
MFCwersjiD.DLL MFC DLL, ANSI lub MBCS — wersja debugowania
MFCwersjiUD.DLL MFC DLL, Wersja debugowania Unicode
MFCMwersja.DLL Biblioteka DLL MFC z kontrolkami Windows Forms, wersja wydania ANSI lub MBCS.
MFCMwersjaU.DLL Biblioteka DLL MFC z kontrolkami formularzy systemu Windows, wersja wydania Unicode
MFCM wersji D.DLL Biblioteka MFC DLL z kontrolkami windows Forms, wersją debugowania ANSI lub MBCS
MFCMwersjaUD.DLL Biblioteka DLL MFC z kontrolkami formularzy systemu Windows, wersja debugowania Unicode

Biblioteki importu potrzebne do kompilowania aplikacji lub bibliotek DLL rozszerzeń MFC korzystających z tych udostępnionych bibliotek DLL mają taką samą nazwę podstawową jak biblioteka DLL, ale mają rozszerzenie nazwy pliku .lib. W przypadku korzystania z udostępnionych bibliotek DLL mała biblioteka statyczna musi być nadal połączona z kodem; ta biblioteka nosi nazwę MFCSversion{U}{D}.lib.

Jeśli dynamicznie łączysz się z udostępnioną wersją biblioteki DLL MFC, niezależnie od tego, czy pochodzi ona z aplikacji, czy z biblioteki DLL rozszerzenia MFC, musisz uwzględnić zgodnąwersję MFC.DLL lubwersjęMFC U.DLL podczas wdrażania produktu.

Aby uzyskać listę bibliotek DLL języka Visual C++, które można dystrybuować za pomocą aplikacji, zobacz Kod dystrybucyjny dla programu Microsoft Visual Studio 2017 i zestawu Microsoft Visual Studio 2017 SDK (obejmuje narzędzia i pliki BuildServer) lub Kod dystrybucyjny dla programu Visual Studio 2019.

Aby uzyskać więcej informacji na temat obsługi MBCS i Unicode w MFC, zobacz Obsługa zestawów znaków Unicode i wielobajtowych (MBCS).

Możesz użyć statycznych lub udostępnionych dynamicznych bibliotek MFC do tworzenia bibliotek DLL, które mogą być używane zarówno przez pliki wykonywalne MFC, jak i inne niż MFC. Są one nazywane "zwykłymi bibliotekami DLL" lub "zwykłymi bibliotekami DLL MFC", aby odróżnić je od bibliotek DLL rozszerzeń MFC, które mogą być używane tylko przez aplikacje MFC i biblioteki MFC DLL. Biblioteka DLL utworzona przy użyciu bibliotek statycznych MFC jest czasami nazywana USRDLL w starszych odwołaniach, ponieważ projekty bibliotek DLL MFC definiują symbol preprocesora _USRDLL. Biblioteka DLL korzystająca z udostępnionych bibliotek DLL MFC jest czasami nazywana AFXDLL w starszych odwołaniach, ponieważ definiuje symbol preprocesora _AFXDLL.

Tworząc swój projekt DLL, łącząc z bibliotekami statycznymi MFC, można wdrożyć bibliotekę DLL bez współdzielonych bibliotek DLL MFC. Gdy projekt DLL łączy się z bibliotekami importowymi MFCversion.LIB lub MFCversionU.LIB, musisz wdrożyć odpowiadającą im współdzieloną bibliotekę DLL MFC MFCversion.DLL lub MFCversionU.DLL razem ze swoją biblioteką DLL. Aby uzyskać więcej informacji, zobacz Biblioteki DLL.

Zobacz także

Ogólne tematy MFC