Isolement de la bibliothèque de contrôles communs MFC
La bibliothèque Common Controls est désormais isolée dans MFC, ce qui permet à différents modules (tels que les DLL utilisateur) d’utiliser différentes versions de la bibliothèque Common Controls en spécifiant la version dans leurs manifestes.
Une application MFC (ou code utilisateur appelé par MFC) effectue des appels aux API de bibliothèque Common Controls via des fonctions wrapper nommées Afx
FunctionName, où FunctionName est le nom d’une API Common Controls. Ces fonctions wrapper sont définies dans afxcomctl32.h et afxcomctl32.inl.
Vous pouvez utiliser les macros AFX_COMCTL32_IF_EXISTS et AFX_COMCTL32_IF_EXISTS2 (définies dans afxcomctl32.h) pour déterminer si la bibliothèque Common Controls implémente une certaine API au lieu d’appeler GetProcAddress.
Techniquement, vous effectuez des appels aux API de la bibliothèque Common Controls via une classe wrapper ( CComCtlWrapper
définie dans afxcomctl32.h). CComCtlWrapper
est également responsable du chargement et du déchargement de comctl32.dll. L’état du module MFC contient un pointeur vers une instance de CComCtlWrapper
. Vous pouvez accéder à la classe wrapper à l’aide de la afxComCtlWrapper
macro.
Notez que l’appel direct de l’API Common Controls (sans utiliser les fonctions wrapper MFC) à partir d’une application MFC ou d’une DLL utilisateur fonctionne dans la plupart des cas, car l’application MFC ou la DLL utilisateur est liée à la bibliothèque Common Controls demandée dans son manifeste). Toutefois, le code MFC lui-même doit utiliser les wrappers, car le code MFC peut être appelé à partir de DLL utilisateur avec différentes versions de bibliothèque Common Controls.