Aislamiento de la biblioteca de controles comunes de MFCIsolation of the MFC Common Controls Library

La biblioteca de controles comunes ahora está aislada dentro de MFC, lo que permite a los módulos diferentes (por ejemplo, archivos DLL de usuario) para usar diferentes versiones de la biblioteca de controles comunes mediante la especificación de la versión en sus manifiestos.The Common Controls library is now isolated within MFC, allowing different modules (such as user DLLs) to use different versions of the Common Controls library by specifying the version in their manifests.

Una aplicación de MFC (o código de usuario que se llamó a MFC) realiza llamadas a API a través de funciones de contenedor con nombre de biblioteca de controles comunes Afx FunctionName, donde FunctionName es el nombre de un común Controles de API.An MFC application (or user code called by MFC) makes calls to Common Controls library APIs through wrapper functions named AfxFunctionName, where FunctionName is the name of a Common Controls API. Las funciones contenedoras se definen en afxcomctl32.h y afxcomctl32.inl.Those wrapper functions are defined in afxcomctl32.h and afxcomctl32.inl.

Puede usar el AFX_COMCTL32_IF_EXISTS y AFX_COMCTL32_IF_EXISTS2 macros (definido en afxcomctl32.h) para determinar si la biblioteca de controles comunes implementa una determinadas API en lugar de llamar GetProcAddress.You can use the AFX_COMCTL32_IF_EXISTS and AFX_COMCTL32_IF_EXISTS2 macros (defined in afxcomctl32.h) to determine whether the Common Controls library implements a certain API instead of calling GetProcAddress.

Técnicamente, realiza llamadas a API de biblioteca de controles comunes a través de una clase contenedora, CComCtlWrapper (que se definen en afxcomctl32.h).Technically, you make calls to Common Controls Library APIs through a wrapper class, CComCtlWrapper (defined in afxcomctl32.h). CComCtlWrapper También es responsable de la carga y descarga de comctl32.dll.CComCtlWrapper is also responsible for the loading and unloading of comctl32.dll. El estado del módulo MFC contiene un puntero a una instancia de CComCtlWrapper.The MFC Module State contains a pointer to an instance of CComCtlWrapper. Puede tener acceso a la clase de contenedor mediante el afxComCtlWrapper macro.You can access the wrapper class using the afxComCtlWrapper macro.

Tenga en cuenta que la llamada a API común controles directamente (sin utilizar las funciones contenedoras MFC) desde MFC aplicación o usuario DLL funcionará en la mayoría de los casos, porque la aplicación de MFC o un archivo DLL de usuario está enlazada a la biblioteca de controles comunes solicitados en su manifiesto).Note that calling Common Controls API directly (not using the MFC wrapper functions) from an MFC application or user DLL will work in most cases, because the MFC application or user DLL is bound to the Common Controls library it requested in its manifest). Sin embargo, el propio código MFC debe usar los contenedores, porque el código MFC puede llamarse desde archivos DLL de usuario con diferentes versiones de la biblioteca de controles comunes.However, the MFC code itself has to use the wrappers, because MFC code might be called from user DLLs with different Common Controls library versions.