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.