Изоляция библиотеки общих элементов управления MFC
Библиотека Common Controls теперь изолирована в MFC, позволяя различным модулям (например, пользовательским библиотекам DLL) использовать различные версии библиотеки Common Controls, указав версию в своих манифестах.
Приложение MFC (или пользовательский код, вызываемый MFC) вызывает API библиотеки Common Controls через функции-оболочки с именем Afx
FunctionName, где FunctionName — это имя API Common Controls. Эти функции-оболочки определяются в afxcomctl32.h и afxcomctl32.inl.
Вы можете использовать макросы AFX_COMCTL32_IF_EXISTS и AFX_COMCTL32_IF_EXISTS2 (определенные в afxcomctl32.h), чтобы определить, реализует ли библиотека Common Controls определенный API вместо вызова GetProcAddress.
Технически вы вызываете API библиотеки Common Controls через класс CComCtlWrapper
оболочки (определенный в afxcomctl32.h). CComCtlWrapper
также отвечает за загрузку и выгрузку comctl32.dll. Состояние модуля MFC содержит указатель на экземпляр CComCtlWrapper
. Доступ к классу оболочки можно получить с помощью afxComCtlWrapper
макроса.
Обратите внимание, что вызов API Common Controls напрямую (не с помощью функций оболочки MFC) из приложения MFC или пользовательской библиотеки DLL будет работать в большинстве случаев, так как приложение MFC или пользовательская библиотека DLL привязана к библиотеке Common Controls, запрошенной в манифесте. Однако сам код MFC должен использовать оболочки, так как код MFC может вызываться из пользовательских библиотек DLL с различными версиями библиотеки Common Controls.