Isolement de la bibliothèque de contrôles communs MFC
La bibliothèque de contrôles communs est maintenant détachée de MFC, ce qui permet à différents modules (tels que les DLL utilisateur) d'utiliser des versions différentes de la bibliothèque de contrôles communs en spécifiant la version dans les manifestes.
Une application MFC (ou le code utilisateur appelée par MFC) effectue des appels aux API de bibliothèque de contrôles communs grâce à des fonctions wrapper nommées AfxFunctionName, où FunctionName est le nom d'une API de contrôles communs. Ces fonctions wrappers sont définies dans afxcomctl32.h et afxcomctl32.inl.
Vous pouvez utiliser les macros _IF_EXISTS D'AFX_ COMCTL32 et AFX_ COMCTL32 _IF_EXISTS2 (définies dans afxcomctl32.h) pour déterminer si la bibliothèque de contrôles communs implémente certaines API au lieu d'appeler GetProcAddress.
Techniquement, vous effectuez des appels aux API de bibliothèque de contrôles communs à travers une classe wrapper, CComCtlWrapper (défini dans afxcomctl32.h). CComCtlWrapper est également responsable du chargement et de déchargement de comctl32.dll. L'état du module de MFC contient un pointeur vers une instance de CComCtlWrapper. Vous pouvez accéder à la classe wrapper à l'aide de la macro afxComCtlWrapper.
Notez que l'appel direct à l'API de contrôles communs (sans utilisation des fonctions wrapper MFC) d'une application MFC ou une DLL utilisateur s'exécutera dans la plupart des cas, car l'application MFC ou la DLL utilisateur est liée à la bibliothèque de contrôles communs demandée dans le manifeste). Toutefois, le code MFC lui-même doit utiliser les wrappers, car le code MFC peut être appelé depuis des DLL utilisateur avec différentes versions de bibliothèque de contrôles communs.