Delen via


Versies van MFC-bibliotheek

De MFC-bibliotheek is beschikbaar in versies die ONDERSTEUNING bieden voor ANSI-code met één byte- en multibytetekenset (MBCS), evenals versies die Unicode ondersteunen (gecodeerd als UTF-16LE, de systeemeigen tekenset van Windows). Elke MFC-versie is beschikbaar als een statische bibliotheek of als gedeelde DLL. Er is ook een kleinere statische MFC-bibliotheekversie die MFC-besturingselementen voor dialoogvensters weglaat, voor toepassingen die zeer gevoelig zijn voor grootte en die besturingselementen niet nodig hebben. De MFC-bibliotheken zijn beschikbaar in zowel foutopsporings- als releaseversies voor ondersteunde architecturen met x86-, x64- en ARM-processors. U kunt beide toepassingen (.exe bestanden) en DLL's maken met elke versie van de MFC-bibliotheken. Er is ook een set MFC-bibliotheken gecompileerd voor communicatie met beheerde code. De gedeelde MFC-DLL's bevatten een versienummer om binaire bibliotheekcompatibiliteit aan te geven.

Automatisch koppelen van MFC-bibliotheekversies

De MFC-headerbestanden bepalen automatisch de juiste versie van de MFC-bibliotheek die moet worden gekoppeld, op basis van waarden die zijn gedefinieerd in uw buildomgeving. De MFC-headerbestanden voegen compilerrichtlijnen toe die de linker instrueren om te koppelen in een specifieke versie van de MFC-bibliotheek.

Bijvoorbeeld, het AFX.H-headerbestand instrueert de linker om te linken aan de volledige statische, beperkte statische of gedeelde DLL-versie van MFC, de ANSI/MBCS- of Unicode-versie, en de debug- of handelsversie, afhankelijk van uw buildconfiguratie.

#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-headerbestanden bevatten ook instructies voor het koppelen in alle vereiste bibliotheken, waaronder MFC-bibliotheken, Win32-bibliotheken, OLE-bibliotheken, OLE-bibliotheken die zijn gebouwd op basis van voorbeelden, ODBC-bibliotheken, enzovoort.

ANSI, MBCS en Unicode

De versies van de MFC ANSI/MBCS-bibliotheek ondersteunen zowel sets met één byte als ASCII en sets met meerderebyte tekens, zoals Shift-JIS. De versies van de MFC Unicode-bibliotheek ondersteunen Unicode in de met UTF-16LE gecodeerde vorm voor brede tekens. Gebruik de ANSI/MBCS-bibliotheekversies van MFC voor UTF-8 gecodeerde Unicode-ondersteuning.

Gebruik het dialoogvenster Projecteigenschappen als u de projectconfiguratie wilt instellen voor het gebruik van unicode-tekenreeksen met één byte, multibyte of wide-character-tekenreeks en tekenondersteuning in de IDE. Stel op de paginaAlgemeen> de eigenschap Tekenset in op Niet ingesteld om een tekenset met één byte te gebruiken. Stel de eigenschap in op Multi-Byte Character Set gebruiken om een tekenset met meerdere bytes te gebruiken of om Unicode-tekenset te gebruiken om Unicode-gecodeerd als UTF-16 te gebruiken.

MFC-projecten gebruiken het preprocessorsymbool _UNICODE om UTF-16 unicode-ondersteuning aan te geven en _MBCS om MBCS-ondersteuning aan te geven. Deze opties sluiten elkaar wederzijds uit in een project.

Naamconventies voor statische MFC-bibliotheken

Statische bibliotheken voor MFC gebruiken de volgende naamconventies. De bibliotheeknamen hebben de vorm

uAFXcd. LIB

waarbij de letters die in cursieve kleine letters worden weergegeven, plaatsaanduidingen zijn waarvan de betekenissen worden weergegeven in de volgende tabel:

Specificator Waarden en betekenissen
u ANSI/MBCS (N) of Unicode (U); weglaten voor versie zonder MFC-besturingselementen in dialoogvensters
c Versie met MFC-besturingselementen in dialoogvensters (CW) of zonder (NMCD)
d Debuggen of Releasen: D=Debuggen; laat de specificatie voor Releasen weg

Alle bibliotheken die in de volgende tabel worden vermeld, zijn meegeleverd in de map \atlmfc\lib voor ondersteunde architecturen.

Bibliotheek Beschrijving
NAFXCW. LIB MFC Static-Link-bibliotheek, releaseversie
NAFXCWD. LIB MFC Static-Link-bibliotheek, foutopsporingsversie
UAFXCW. LIB MFC Static-Link-bibliotheek met Unicode-ondersteuning, releaseversie
UAFXCWD. LIB MFC Static-Link-bibliotheek met Unicode-ondersteuning, foutopsporingsversie
AFXNMCD. LIB MFC Static-Link-bibliotheek zonder MFC-dialoogvensterbesturingselementen, releaseversie
AFXNMCDD. LIB MFC Static-Link-bibliotheek zonder MFC-dialoogvensterbesturingselementen, foutopsporingsversie

Foutopsporingsprogrammabestanden met dezelfde basisnaam en een .pdb-extensie zijn ook beschikbaar voor elk van de statische bibliotheken.

Naamconventies voor gedeelde MFC-DLL's

De gedeelde MFC-DLL's volgen ook een gestructureerde naamconventie. Dit maakt het gemakkelijker om te weten welke DLL of bibliotheek u moet gebruiken voor welk doel.

De MFC-DLL's hebben versienummers die duiden op binaire compatibiliteit. Gebruik MFC-DLL's met dezelfde versie als uw andere bibliotheken en compilerhulpprogramma's om compatibiliteit binnen een project te garanderen.

DLL Beschrijving
MFC-versie.DLL MFC DLL, ANSI- of MBCS Release-versie
MFCversionU.DLL MFC DLL, Unicode Release-versie
MFCversionD.DLL MFC DLL-, ANSI- of MBCS-foutopsporingsversie
MFC-versieUD.DLL MFC DLL, Unicode-foutopsporingsversie
MFCMversion.DLL MFC DLL met Windows Forms-besturingselementen, ANSI- of MBCS-releaseversie
MFCMversionU.DLL MFC DLL met Besturingselementen voor Windows Forms, Unicode Release-versie
MFCM-versieD.DLL MFC DLL met Windows Forms-besturingselementen, ANSI- of MBCS-foutopsporingsversie
MFCMversionUD.DLL MFC DLL met Besturingselementen voor Windows Forms, Unicode-foutopsporingsversie

De importbibliotheken die nodig zijn voor het bouwen van toepassingen of MFC-extensie-DLL's die gebruikmaken van deze gedeelde DLL's hebben dezelfde basisnaam als het DLL-bestand, maar een .lib-bestandsnaamextensie hebben. Wanneer u de gedeelde DLL's gebruikt, moet er nog steeds een kleine statische bibliotheek worden gekoppeld aan uw code; deze bibliotheek heeft de naamMFCS-versie{U}{D}.lib.

Als u dynamisch een koppeling maakt naar de gedeelde DLL-versie van MFC, ongeacht of deze afkomstig is van een toepassing of van een MFC-extensie-DLL, moet u de overeenkomende MFC-versie opnemen.DLL of MFC-versie U.DLL wanneer u uw product implementeert.

Zie Distribueerbare code voor Microsoft Visual Studio 2017 en Microsoft Visual Studio 2017 SDK (inclusief hulpprogramma's en BuildServer Files) of distribueerbare code voor Visual Studio 2019 voor een lijst met Visual C++-DLL's die kunnen worden gedistribueerd met uw toepassingen.

Zie ondersteuning voor Unicode en Multibyte Character Set (MBCS) voor meer informatie over MBCS- en Unicode-ondersteuning in MFC.

U kunt de statische of gedeelde dynamische MFC-bibliotheken gebruiken om DLL's te maken die kunnen worden gebruikt door zowel MFC- als niet-MFC-uitvoerbare bestanden. Deze worden 'reguliere DLL's' of 'reguliere MFC-DLL's' genoemd, om ze te onderscheiden van MFC-extensie-DLL's die alleen kunnen worden gebruikt door MFC-apps en MFC-DLL's. Een DLL die is gebouwd met behulp van de statische MFC-bibliotheken, wordt soms een USRDLL genoemd in oudere verwijzingen, omdat MFC DLL-projecten het preprocessorsymbool definiëren _USRDLL. Een DLL die gebruikmaakt van de gedeelde MFC-DLL's wordt ook wel een AFXDLL genoemd in oudere verwijzingen, omdat hiermee het preprocessorsymbool wordt gedefinieerd _AFXDLL.

Wanneer u uw DLL-project maakt door een koppeling te maken naar de statische MFC-bibliotheken, kan uw DLL worden geïmplementeerd zonder de gedeelde MFC-DLL's. Wanneer uw DLL-project is gekoppeld aan de importbibliotheken MFCversie.LIB of MFCversieU.LIB, moet u de overeenkomende gedeelde MFC-DLL MFCversie.DLL of MFCversieU.DLL samen met uw DLL implementeren. Zie DLL's voor meer informatie.

Zie ook

Algemene MFC-onderwerpen