Aislamiento de biblioteca de Controles comunes de MFC

La biblioteca de Controles comunes ahora se aísla dentro de MFC, lo que módulos diferentes (como archivos DLL de usuario) utilizan versiones diferentes de Controles comunes que la biblioteca especificando la versión en los manifiestos.

Una aplicación MFC (o el código de usuario denominado por MFC) llama a la biblioteca API de Controles comunes con funciones de contenedor con nombre AfxFunctionName, donde es el nombre FunctionName de Controles comunes API.Las invocaciones de funciones se definen en afxcomctl32.h y afxcomctl32.inl.

Puede utilizar macros de AFX_COMCTL32_IF_EXISTS y de AFX_COMCTL32_IF_EXISTS2 (definido en afxcomctl32.h) determinar si la biblioteca de Controles comunes implementa algunas API en lugar de llamar a GetProcAddress.

Técnicamente, se llama a la biblioteca API a través de una clase contenedora, CComCtlWrapper de Controles comunes (definido en afxcomctl32.h).CComCtlWrapper también es responsable de cargar y descargar de comctl32.dll.El estado del módulo MFC contiene un puntero a una instancia de CComCtlWrapper.Puede tener acceso a la clase contenedora mediante la macro de afxComCtlWrapper .

Observe que llamando a Controles comunes API directamente (sin utilizar funciones de contenedor MFC) de una aplicación o un usuario MFC funcionará DLL en la mayoría de los casos, dado que vinculan la aplicación o usuario DLL de MFC a la biblioteca de Controles comunes solicitado en su manifiesto).Sin embargo, el código MFC tiene que utilizar contenedores, porque el código MFC se podría llamar de las DLL de usuario con distintas versiones de la biblioteca de Controles comunes.