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 wersjach debugowania, jak i wydania 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ą poprawną wersję biblioteki MFC do połączenia na podstawie wartości zdefiniowanych w środowisku kompilacji. Pliki nagłówkowe MFC dodają dyrektywy kompilatora, nakazując konsolidatorowi połączenie w określonej wersji biblioteki MFC.

Na przykład AFX. Plik nagłówka H instruuje konsolidatora o łączeniu w pełnej statycznej, ograniczonej statycznej lub udostępnionej wersji biblioteki DLL MFC; ANSI/MBCS lub Wersja Unicode; i debugowanie lub wersja detaliczna 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 postaci zakodowanej 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>konfiguracji Ogó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ć obsługę formatu UNICODE w formacie UTF-16 i _MBCS wskazywać obsługę 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ą formularz

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); Pomijanie wersji bez kontrolek MFC w oknach dialogowych
C Wersja z kontrolkami MFC w oknach dialogowych (CW) lub bez (NMCD)
d Debugowanie lub wydanie: D=Debug; Pomijanie specyfikatora wydania

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 wydania
NAFXCWD.LIB Biblioteka MFC Static-Link, wersja debugowania
UAFXCW. LIB Biblioteka MFC Static-Link z obsługą unicode, wersja wydania
UAFXCWD. LIB Biblioteka MFC Static-Link z obsługą unicode, wersja debugowania
AFXNMCD. LIB Biblioteka MFC Static-Link bez kontrolek okien dialogowych MFC, wersja wydania
AFXNMCDD. LIB Biblioteka MFC Static-Link bez kontrolek okien dialogowych MFC, wersja debugowania

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 udostępnionej biblioteki DLL MFC

Udostępnione biblioteki DLL MFC są również zgodne ze strukturą konwencji nazewnictwa. Ułatwia to poznanie biblioteki DLL lub biblioteki, której należy używać w tym celu.

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
MFCversion.DLL Wersja wydania biblioteki MFC DLL, ANSI lub MBCS
MFCw wersjiU.DLL MFC DLL, wersja wydania Unicode
MFCw wersjiD.DLL MFC DLL, ANSI lub MBCS — wersja debugowania
WersjaMFCUD.DLL MFC DLL, Wersja debugowania Unicode
MFCMversion.DLL Biblioteka MFC DLL z kontrolkami windows Forms, wersją wydania ANSI lub MBCS
MFCMw wersjiU.DLL Biblioteka DLL MFC z kontrolkami formularzy systemu Windows, wersja wydania Unicode
MFCMw wersjiD.DLL Biblioteka MFC DLL z kontrolkami windows Forms, wersją debugowania ANSI lub MBCS
MFCMw wersjiUD.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, podczas wdrażania produktu należy dołączyć zgodną wersję MFCversion.DLL lub MFCversionU.DLL.

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.

Podczas tworzenia projektu DLL przez połączenie z bibliotekami statycznych MFC można wdrożyć bibliotekę DLL bez udostępnionych bibliotek DLL MFC. Gdy projekt DLL łączy się z wersją MFCimportowania bibliotek. BIBLIOTEKA LIB lub MFCw wersjiU.LIB, należy wdrożyć zgodną bibliotekę MFC udostępnioną bibliotekę DLL MFC w wersji MFClub bibliotekę MFCw wersji U.DLL wraz z biblioteką DLL. Aby uzyskać więcej informacji, zobacz Biblioteki DLL.

Zobacz też

Tematy ogólne dotyczące MFC