Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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).
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.
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.