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).
Obsługa biblioteki linków dynamicznych
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.