Isolement de la bibliothèque de contrôles communs MFC
La bibliothèque de contrôles communs est maintenant isolé dans MFC, ce qui permet à différents modules (tels que les DLL d'utilisateur) pour utiliser des versions de bibliothèque de contrôles communs en spécifiant la version dans leur manifeste.
Une application MFC (ou le code utilisateur appelé par les MFC) effectue des appels aux API de bibliothèque de contrôles communs via les fonctions wrapper nommées AfxFunctionName, où FunctionName est le nom d'une API de contrôles communs.Ces fonctions wrapper sont définies dans afxcomctl32.h et afxcomctl32.inl.
Vous pouvez utiliser les macros d' AFX_COMCTL32_IF_EXISTS et d' AFX_COMCTL32_IF_EXISTS2 (définies dans afxcomctl32.h) pour déterminer si la bibliothèque de contrôles communs implémente une API au lieu d'appeler GetProcAddress.
Techniquement, vous effectuez des appels aux API de bibliothèque de contrôles communs dans une classe wrapper, CComCtlWrapper (défini 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 d' CComCtlWrapper.Vous pouvez accéder à la classe wrapper à l'aide de la macro d' afxComCtlWrapper .
Notez que l'API d'appel des contrôles communs directement (et non à l'aide de les fonctions wrapper MFC) d'une DLL d'application ou utilisateur mfc s'exécute dans la plupart des cas, parce que la DLL d'application ou utilisateur MFC est lié à la bibliothèque de contrôles communs il a demandé dans le manifeste).Toutefois, le code MFC elle-même doit utiliser des wrappers, car le code MFC peut être appelé à partir de les DLL d'utilisateur avec différentes versions de bibliothèque de contrôles communs.