Condividi tramite


Isolamento della libreria di controlli comuni MFC

La libreria Common Controls è ora isolata all'interno di MFC, consentendo a moduli diversi (ad esempio dll utente) di usare versioni diverse della libreria Controlli comuni specificando la versione nei relativi manifesti.

Un'applicazione MFC (o un codice utente chiamato da MFC) effettua chiamate alle API della libreria Common Controls tramite funzioni wrapper denominate AfxFunctionName, dove FunctionName è il nome di un'API Common Controls. Tali funzioni wrapper sono definite in afxcomctl32.h e afxcomctl32.inl.

È possibile usare le macro AFX_COMCTL32_IF_EXISTS e AFX_COMCTL32_IF_EXISTS2 (definite in afxcomctl32.h) per determinare se la libreria Common Controls implementa una determinata API anziché chiamare GetProcAddress.

Tecnicamente, si effettuano chiamate alle API della libreria di controlli comuni tramite una classe wrapper, CComCtlWrapper definita in afxcomctl32.h. CComCtlWrapper è inoltre responsabile del caricamento e dello scaricamento di comctl32.dll. Lo stato del modulo MFC contiene un puntatore a un'istanza di CComCtlWrapper. È possibile accedere alla classe wrapper usando la afxComCtlWrapper macro.

Si noti che la chiamata diretta dell'API Common Controls (non usando le funzioni wrapper MFC) da un'applicazione MFC o una DLL utente funzionerà nella maggior parte dei casi, perché l'applicazione MFC o la DLL utente è associata alla libreria di controlli comuni richiesta nel relativo manifesto. Tuttavia, il codice MFC stesso deve usare i wrapper, perché il codice MFC potrebbe essere chiamato da DLL utente con diverse versioni della libreria Common Controls.