Versions de bibliothèque MFC
La bibliothèque MFC est disponible dans les versions qui prennent en charge le code ANSI à octet unique et multioctet (Mo CS), ainsi que les versions qui prennent en charge Unicode (encodé en UTF-16LE, jeu de caractères natif Windows). Chaque version de MFC est disponible en tant que bibliothèque statique ou en tant que DLL partagée. Il existe également une version de bibliothèque statique MFC plus petite qui laisse les contrôles MFC pour les boîtes de dialogue, pour les applications très sensibles à la taille et qui n’ont pas besoin de ces contrôles. Les bibliothèques MFC sont disponibles dans les versions de débogage et de mise en production pour les architectures prises en charge qui incluent des processeurs x86, x64 et ARM. Vous pouvez créer des applications (fichiers.exe) et des DLL avec n’importe quelle version des bibliothèques MFC. Il existe également un ensemble de bibliothèques MFC compilées pour l’interopérabilité avec du code managé. Les DLL partagées MFC incluent un numéro de version pour indiquer la compatibilité binaire de la bibliothèque.
Liaison automatique des versions de bibliothèque MFC
Les fichiers d’en-tête MFC déterminent automatiquement la version correcte de la bibliothèque MFC à lier, en fonction des valeurs définies dans votre environnement de génération. Les fichiers d’en-tête MFC ajoutent des directives du compilateur demandant à l’éditeur de liens de lier dans une version spécifique de la bibliothèque MFC.
Par exemple, L’AFX. Le fichier d’en-tête H indique à l’éditeur de liens de lier dans la version statique, statique limitée ou partagée complète de MFC ; VERSION ANSI/Mo CS ou Unicode ; et débogage ou version commerciale, en fonction de votre configuration de build :
#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
Les fichiers d’en-tête MFC incluent également des directives pour lier toutes les bibliothèques requises, notamment les bibliothèques MFC, les bibliothèques Win32, les bibliothèques OLE, les bibliothèques OLE générées à partir d’exemples, de bibliothèques ODBC, et ainsi de suite.
ANSI, Mo CS et Unicode
Les versions de la bibliothèque ANSI/Mo CS MFC prennent en charge les jeux de caractères à octet unique tels que ASCII et les jeux de caractères multioctets tels que Shift-JIS. Les versions de la bibliothèque Unicode MFC prennent en charge Unicode dans son formulaire encodé en caractères larges UTF-16LE. Utilisez les versions de bibliothèque ANSI/Mo CS de MFC pour la prise en charge Unicode encodée en UTF-8.
Pour définir la configuration de votre projet pour utiliser une chaîne Unicode à octet unique, multioctet ou une chaîne Unicode à caractères larges dans l’IDE, utilisez la boîte de dialogue Propriétés du projet. Dans la page Général des propriétés>de configuration, définissez la propriété Jeu de caractères sur Not Set pour utiliser un jeu de caractères sur un octet. Définissez la propriété sur Utiliser le jeu de caractères multioctets pour utiliser un jeu de caractères multioctets ou pour utiliser le jeu de caractères Unicode pour utiliser l’encodage Unicode en UTF-16.
Les projets MFC utilisent le symbole de préprocesseur _UNICODE pour indiquer la prise en charge Unicode de caractères larges UTF-16 et _Mo CS pour indiquer la prise en charge de Mo CS. Ces options s’excluent mutuellement dans un projet.
Conventions d’affectation de noms de bibliothèque statique MFC
Les bibliothèques statiques pour MFC utilisent les conventions d’affectation de noms suivantes. Les noms de bibliothèque ont le formulaire
uAFXcd. LIB
où les lettres affichées en minuscules italiques sont des espaces réservés pour les spécificateurs dont les significations sont affichées dans le tableau suivant :
Spécificateur | Valeurs et significations |
---|---|
u | ANSI/Mo CS (N) ou Unicode (U) ; omettez la version sans contrôles MFC dans les boîtes de dialogue |
c | Version avec des contrôles MFC dans des dialogues (CW) ou sans (NMCD) |
d | Déboguer ou libérer : D=Déboguer ; spécificateur omit pour la version |
Toutes les bibliothèques répertoriées dans le tableau suivant sont incluses prédéfinis dans le répertoire \atlmfc\lib pour les architectures de build prises en charge.
Bibliothèque | Description |
---|---|
NAFXCW.LIB | Bibliothèque static-link MFC, version release |
NAFXCWD.LIB | Bibliothèque statique MFC, version de débogage |
UAFXCW. LIB | Bibliothèque statique MFC avec prise en charge Unicode, version de mise en production |
UAFXCWD. LIB | Bibliothèque statique MFC avec prise en charge Unicode, version de débogage |
AFXNMCD. LIB | Bibliothèque statique MFC sans contrôles de boîte de dialogue MFC, version de mise en production |
AFXNMCDD. LIB | Bibliothèque statique MFC sans contrôles de boîte de dialogue MFC, version de débogage |
Les fichiers débogueur qui ont le même nom de base et une extension .pdb sont également disponibles pour chacune des bibliothèques statiques.
Conventions d’affectation de noms de DLL partagées MFC
Les DLL partagées MFC suivent également une convention de nommage structurée. Cela facilite la connaissance de la DLL ou de la bibliothèque que vous devez utiliser à cet effet.
Les DLL MFC ont des numéros de version qui indiquent la compatibilité binaire. Utilisez des DLL MFC qui ont la même version que vos autres bibliothèques et ensemble d’outils de compilateur pour garantir la compatibilité au sein d’un projet.
DLL | Description |
---|---|
MFCversion.DLL | DLL MFC, ANSI ou version Mo CS Release |
Version MFCU.DLL | DLL MFC, version de publication Unicode |
MFCversionD.DLL | DLL MFC, ANSI ou Mo CS Debug version |
MFCversionUD.DLL | DLL MFC, version de débogage Unicode |
MFCMversion.DLL | DLL MFC avec des contrôles Windows Forms, ANSI ou version Mo CS Release |
MFCMversionU.DLL | DLL MFC avec des contrôles Windows Forms, version de version de version Unicode |
MFCMversionD.DLL | DLL MFC avec des contrôles Windows Forms, ANSI ou Mo CS Debug version |
MFCMversionUD.DLL | DLL MFC avec contrôles Windows Forms, version de débogage Unicode |
Les bibliothèques d’importation nécessaires pour générer des applications ou des DLL d’extension MFC qui utilisent ces DLL partagées ont le même nom de base que la DLL, mais qui ont une extension de nom de fichier .lib. Lorsque vous utilisez les DLL partagées, une petite bibliothèque statique doit toujours être liée à votre code ; cette bibliothèque est nommée MFCSversion{U}{D}.lib.
Si vous établissez une liaison dynamique à la version DLL partagée de MFC, qu’il s’agisse d’une application ou d’une DLL d’extension MFC, vous devez inclure la version MFCcorrespondante.DLL ou la versionMFCU.DLL lorsque vous déployez votre produit.
Pour obtenir la liste des DLL Visual C++ qui peuvent être distribuées avec vos applications, consultez Le code distribuable pour Microsoft Visual Studio 2017 et le SDK Microsoft Visual Studio 2017 (inclut les utilitaires et les fichiers BuildServer) ou le code distribuable pour Visual Studio 2019.
Pour plus d’informations sur la prise en charge de Mo CS et Unicode dans MFC, consultez la prise en charge du jeu de caractères Unicode et multioctet (Mo CS).
Prise en charge de la bibliothèque de liens dynamiques
Vous pouvez utiliser les bibliothèques MFC statiques ou partagées pour créer des DLL qui peuvent être utilisées par les exécutables MFC et non-MFC. Ils sont appelés « DLL régulières » ou « DLL MFC standard », pour les distinguer des DLL d’extension MFC qui ne peuvent être utilisées que par les applications MFC et les DLL MFC. Une DLL créée à l’aide des bibliothèques statiques MFC est parfois appelée USRDLL dans les références antérieures, car les projets DLL MFC définissent le symbole de préprocesseur _USRDLL. Une DLL qui utilise les DLL partagées MFC est parfois appelée AFXDLL dans les références antérieures, car elle définit le symbole de préprocesseur _AFXDLL.
Lorsque vous créez votre projet DLL en liant les bibliothèques statiques MFC, votre DLL peut être déployée sans les DLL partagées MFC. Lorsque votre projet DLL est lié à la version MFCdes bibliothèques d’importation. LIB ou MFCversionU.LIB, vous devez déployer la DLL MFC partagée MFC correspondante version.DLL ou MFCversionU.DLL avec votre DLL. Pour plus d’informations, consultez DLL.