Isolamento da biblioteca de controles comuns MFC

A biblioteca controles comuns agora está isolada no MFC, permitindo que diferentes módulos (como DLLs de usuário) usem diferentes versões da biblioteca de Controles Comuns especificando a versão em seus manifestos.

Um aplicativo MFC (ou código de usuário chamado por MFC) faz chamadas para APIs de biblioteca de Controles Comuns por meio de funções de wrapper chamadas AfxFunctionName, em que FunctionName é o nome de uma API de Controles Comuns. Essas funções de wrapper são definidas em afxcomctl32.h e afxcomctl32.inl.

Você pode usar as macros AFX_COMCTL32_IF_EXISTS e AFX_COMCTL32_IF_EXISTS2 (definidas em afxcomctl32.h) para determinar se a biblioteca controles comuns implementa uma determinada API, em vez de chamar GetProcAddress.

Tecnicamente, você faz chamadas para APIs da Biblioteca de Controles Comuns por meio de uma classe wrapper CComCtlWrapper (definida em afxcomctl32.h). CComCtlWrapper também é responsável por carregar e descarregar comctl32.dll. O Estado do Módulo MFC contém um ponteiro para uma instância de CComCtlWrapper. Você pode acessar a classe wrapper usando a macro afxComCtlWrapper.

Observe que chamar a API de Controles Comuns diretamente (sem usar as funções de wrapper MFC) de um aplicativo MFC ou DLL de usuário funcionará na maioria dos casos, pois o aplicativo MFC ou a DLL do usuário está associada à biblioteca de Controles Comuns solicitada em seu manifesto). No entanto, o próprio código MFC precisa usar os wrappers, pois o código MFC pode ser chamado de DLLs de usuário com diferentes versões de biblioteca de Controles Comuns.