Condividi tramite


Isolamento della libreria di controlli comuni MFC

La libreria dei controlli comuni ora è isolata all'interno di MFC, consentendo così ai moduli diversi (come DLL utente) utilizzare le diverse versioni della libreria dei controlli comuni specifica la versione nei manifesti.

Un'applicazione MFC (o codice utente chiamato da MFC) effettua chiamate alle API di libreria di controlli comuni con le funzioni wrapper denominate AfxFunctionName, dove FunctionName è il nome dell'API controlli comuni. Tali funzioni wrapper sono definite in afxcomctl32.h e in afxcomctl32.inl.

È possibile utilizzare macro di AFX_COMCTL32_IF_EXISTS2 e di AFX_COMCTL32_IF_EXISTS (definite in afxcomctl32.h) per determinare se la libreria controlli comuni implementa un determinato API anziché chiamare GetProcAddress.

Tecnicamente, apportare le chiamate alle API tramite una classe wrapper, CComCtlWrapper della libreria dei controlli comuni (definito da afxcomctl32.h). CComCtlWrapper è anche responsabile del caricamento e lo scaricamento di comctl32.dll. Lo stato del modulo MFC contiene un puntatore a un'istanza di CComCtlWrapper. È possibile accedere alla classe wrapper utilizzando la macro di afxComCtlWrapper.

Si noti che i controlli comuni chiamata API direttamente (non utilizzare le funzioni wrapper MFC) da un'applicazione MFC o da una DLL dell'utente verranno eseguite nella maggior parte dei casi, poiché l'applicazione MFC o la DLL utente è associata alla libreria dei controlli comuni ha richiesto nel manifesto). Tuttavia, il codice MFC stessa deve utilizzare i wrapper, poiché il codice MFC può essere chiamato da DLL dell'utente con versioni diverse della libreria controlli comuni.