Isolierung der MFC-Bibliothek für Standardsteuerelemente
Die Bibliothek für allgemeine Steuerelemente ist jetzt innerhalb von MFC isoliert, sodass unterschiedliche Module (z. B. Benutzer-DLLs) verschiedene Versionen der Bibliothek für allgemeine Steuerelemente verwenden können, indem die Version in ihren Manifesten angegeben wird.
Eine MFC-Anwendung (oder Benutzercode, der von MFC aufgerufen wird) führt Aufrufe von Common Controls-Bibliotheks-APIs über Wrapperfunktionen namens Afx
"FunctionName" durch, wobei FunctionName der Name einer allgemeinen Steuerelement-API ist. Diese Wrapperfunktionen werden in afxcomctl32.h und afxcomctl32.inl definiert.
Sie können die makros AFX_COMCTL32_IF_EXISTS und AFX_COMCTL32_IF_EXISTS2 (definiert in afxcomctl32.h) verwenden, um zu bestimmen, ob die Bibliothek für allgemeine Steuerelemente eine bestimmte API implementiert, anstatt GetProcAddress aufzurufen.
Technisch führen Sie Aufrufe von allgemeinen Steuerelementbibliothek-APIs über eine Wrapperklasse CComCtlWrapper
(definiert in afxcomctl32.h) durch. CComCtlWrapper
ist auch für das Laden und Entladen von comctl32.dll verantwortlich. Der MFC-Modulstatus enthält einen Zeiger auf eine Instanz von CComCtlWrapper
. Sie können mithilfe des afxComCtlWrapper
Makros auf die Wrapperklasse zugreifen.
Beachten Sie, dass das direkte Aufrufen der allgemeinen Steuerelement-API (nicht die MFC-Wrapperfunktionen) aus einer MFC-Anwendung oder Benutzer-DLL in den meisten Fällen funktioniert, da die MFC-Anwendung oder Benutzer-DLL an die bibliothek für allgemeine Steuerelemente gebunden ist, die sie in ihrem Manifest angefordert hat). Der MFC-Code selbst muss jedoch die Wrapper verwenden, da MFC-Code möglicherweise von Benutzer-DLLs mit unterschiedlichen Allgemeinen Steuerelementbibliotheksversionen aufgerufen werden kann.