MFC-Bibliotheksversionen

Die MFC-Bibliothek ist in Versionen verfügbar, die ANSI Single-Byte- und Multibyte-Zeichensatz (MBCS)-Code unterstützen, sowie Versionen, die Unicode (codiert als UTF-16LE, den windows-nativen Zeichensatz) unterstützen. Jede MFC-Version ist als statische Bibliothek oder als freigegebene DLL verfügbar. Es gibt auch eine kleinere statische MFC-Bibliotheksversion, die MFC-Steuerelemente für Dialogfelder auslässt, für Anwendungen, die sehr empfindlich auf die Größe sind und diese Steuerelemente nicht benötigen. Die MFC-Bibliotheken sind sowohl in Debug- als auch in Releaseversionen für unterstützte Architekturen verfügbar, die x86-, x64- und ARM-Prozessoren enthalten. Sie können sowohl Anwendungen (EXE-Dateien) als auch DLLs mit jeder Version der MFC-Bibliotheken erstellen. Es gibt auch eine Reihe von MFC-Bibliotheken, die für die Interoperabilität mit verwaltetem Code kompiliert werden. Die gemeinsam genutzten MFC-DLLs enthalten eine Versionsnummer, um die Binäre Kompatibilität der Bibliothek anzugeben.

Automatische Verknüpfung von MFC-Bibliotheksversionen

Die MFC-Headerdateien bestimmen automatisch die richtige Version der zu verknüpfenden MFC-Bibliothek basierend auf werten, die in Ihrer Buildumgebung definiert sind. Die MFC-Headerdateien fügen Compilerdirektiven hinzu, die den Linker anweisen, in einer bestimmten Version der MFC-Bibliothek zu verknüpfen.

Beispiel: AFX. Die H-Headerdatei weist den Linker an, eine Verknüpfung in der vollständig statischen, eingeschränkten statischen oder freigegebenen DLL-Version von MFC zu erstellen; ANSI/MBCS oder Unicode-Version; und Debuggen oder Einzelhandelsversion, je nach Buildkonfiguration:

#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-Headerdateien enthalten auch Direktiven zum Verknüpfen in allen erforderlichen Bibliotheken, einschließlich MFC-Bibliotheken, Win32-Bibliotheken, OLE-Bibliotheken, OLE-Bibliotheken, die aus Beispielen, ODBC-Bibliotheken usw. erstellt wurden.

ANSI, MBCS und Unicode

Die MFC ANSI/MBCS-Bibliotheksversionen unterstützen sowohl Single-Byte-Zeichensätze wie ASCII als auch Multibyte-Zeichensätze wie Shift-JIS. Die MFC Unicode-Bibliotheksversionen unterstützen Unicode in seiner UTF-16LE-breitzeichencodierten Form. Verwenden Sie die ANSI/MBCS-Bibliotheksversionen von MFC für UTF-8-codierte Unicode-Unterstützung.

Verwenden Sie das Dialogfeld "Projekteigenschaften ", um die Projektkonfiguration so festzulegen, dass sie Single-Byte-, Multibyte- oder Breitzeichen-Unicode-Zeichenfolgen- und Zeichenunterstützung in der IDE verwendet. Legen Sie auf der Seite "Konfigurationseigenschaften>allgemein" die Eigenschaft "Zeichensatz" auf "Nicht festgelegt" fest, um einen Einzelbyte-Zeichensatz zu verwenden. Legen Sie die Eigenschaft auf "Multibyte-Zeichensatz verwenden" fest, um einen Multibyte-Zeichensatz zu verwenden, oder verwenden Sie Unicode-Zeichensatz , um Unicode-codiert als UTF-16 zu verwenden.

MFC-Projekte verwenden das Präprozessorsymbol _UNICODE, um DIE UTF-16-Unicode-Unterstützung anzugeben, und _MBCS, um die MBCS-Unterstützung anzugeben. Diese Optionen schließen sich in einem Projekt gegenseitig aus.

Benennungskonventionen für statische MFC-Bibliotheken

Statische Bibliotheken für MFC verwenden die folgenden Benennungskonventionen. Die Bibliotheksnamen weisen das Formular auf

uAFXcd. LIB

Wobei die in kursiv geschriebenen Buchstaben Platzhalter für Bezeichner sind, deren Bedeutungen in der folgenden Tabelle angezeigt werden:

Bezeichner Werte und Bedeutungen
n ANSI/MBCS (N) oder Unicode (U); Für Version ohne MFC-Steuerelemente in Dialogfeldern weglassen
c Version mit MFC-Steuerelementen in Dialogfeldern (CW) oder ohne (NMCD)
d Debug oder Release: D=Debug; Bezeichner für Release weglassen

Alle in der folgenden Tabelle aufgeführten Bibliotheken sind im Verzeichnis "\atlmfc\lib" für unterstützte Buildarchitekturen vorkonfiguriert.

Bibliothek Beschreibung
NAFXCW.LIB MFC Static-Link Library, Version
NAFXCWD.LIB MFC Static-Link Library, Debugversion
UAFXCW.LIB MFC Static-Link Library mit Unicode-Unterstützung, Version
UAFXCWD.LIB MFC Static-Link Library mit Unicode-Unterstützung, Debugversion
AFXNMCD. LIB MFC Static-Link Library ohne MFC-Dialogsteuerelemente, Versionsversion
AFXNMCDD. LIB MFC Static-Link Library ohne MFC-Dialogsteuerelemente, Debugversion

Debuggerdateien mit demselben Basisnamen und einer PDB-Erweiterung stehen auch für jede der statischen Bibliotheken zur Verfügung.

Benennungskonventionen für gemeinsam genutzte MFC-DLL

Die gemeinsam genutzten MFC-DLLs folgen auch einer strukturierten Benennungskonvention. Dadurch ist es einfacher zu wissen, welche DLL oder Bibliothek Sie für welchen Zweck verwenden sollten.

Die MFC-DLLs weisen Versionsnummern auf, die die binäre Kompatibilität angeben. Verwenden Sie MFC-DLLs, die dieselbe Version wie Ihre anderen Bibliotheken und Compilertools haben, um die Kompatibilität innerhalb eines Projekts zu gewährleisten.

DLL Beschreibung
MFCversion.DLL MFC DLL, ANSI oder MBCS Release-Version
MFC-VersionU.DLL MFC DLL, Unicode Release-Version
MFC-VersionD.DLL MFC-DLL, ANSI- oder MBCS-Debugversion
MFC-VersionUD.DLL MFC DLL, Unicode Debug-Version
MFCMversion.DLL MFC DLL mit Windows Forms-Steuerelementen, ANSI- oder MBCS-Version
MFCM-VersionU.DLL MFC-DLL mit Windows Forms-Steuerelementen, Unicode Release-Version
MFCMVersionD.DLL MFC DLL mit Windows Forms-Steuerelementen, ANSI- oder MBCS-Debugversion
MFCM-VersionUD.DLL MFC-DLL mit Windows Forms-Steuerelementen, Unicode-Debugversion

Die Importbibliotheken, die zum Erstellen von Anwendungen oder MFC-Erweiterungs-DLLs erforderlich sind, die diese freigegebenen DLLs verwenden, weisen den gleichen Basisnamen wie die DLL auf, verfügen jedoch über die Dateinamenerweiterung .lib. Wenn Sie die freigegebenen DLLs verwenden, muss eine kleine statische Bibliothek weiterhin mit Ihrem Code verknüpft sein. diese Bibliothek heißt MFCS-Version{U}{D}.lib.

Wenn Sie dynamisch eine Verknüpfung mit der freigegebenen DLL-Version von MFC herstellen, unabhängig davon, ob es sich um eine Anwendung oder eine MFC-Erweiterungs-DLL handelt, müssen Sie die entsprechende MFCVersion.DLL oder die MFC-VersionU.DLL einschließen, wenn Sie Ihr Produkt bereitstellen.

Eine Liste der Visual C++-DLLs, die mit Ihren Anwendungen verteilt werden können, finden Sie unter Distributionable Code for Microsoft Visual Studio 2017 and Microsoft Visual Studio 2017 SDK (Includes Utilities and BuildServer Files) or Distributionable Code for Visual Studio 2019.

Weitere Informationen zur MBCS- und Unicode-Unterstützung in MFC finden Sie unter Unterstützung von Unicode und Multibyte Character Set (MBCS).

Sie können entweder die statischen oder freigegebenen dynamischen MFC-Bibliotheken verwenden, um DLLs zu erstellen, die sowohl von MFC als auch von nicht-MFC ausführbaren Dateien verwendet werden können. Diese werden als "reguläre DLLs" oder "reguläre MFC DLLs" bezeichnet, um sie von MFC-Erweiterungs-DLLs zu unterscheiden, die nur von MFC-Apps und MFC-DLLs verwendet werden können. Eine DLL, die mithilfe der statischen MFC-Bibliotheken erstellt wird, wird manchmal in älteren Verweisen als USRDLL bezeichnet, da MFC DLL-Projekte das Präprozessorsymbol _USRDLL definieren. Eine DLL, die die gemeinsam genutzten MFC-DLLs verwendet, wird manchmal als AFXDLL in älteren Verweisen bezeichnet, da sie das Präprozessorsymbol _AFXDLL definiert.

Wenn Sie Ihr DLL-Projekt erstellen, indem Sie eine Verknüpfung mit den statischen MFC-Bibliotheken herstellen, kann Ihre DLL ohne die gemeinsam genutzten MFC-DLLs bereitgestellt werden. Wenn Ihr DLL-Projekt mit der MFC-Version der Importbibliotheken verknüpft ist. LIB oder MFC-VersionU.LIB müssen Sie die übereinstimmende MFC shared DLL MFCversion.DLL oder MFC-VersionU.DLL zusammen mit Ihrer DLL bereitstellen. Weitere Informationen finden Sie unter DLLs.

Siehe auch

Allgemeine MFC-Themen