MFC公共控件库隔离

公共控件库在 MFC 中现在隔离,允许不同的模块 (例如用户 DLL) 使用库通过指定版本在它们指示公共控件的不同版本。

MFC 应用程序 (或 MFC 调用的用户代码) 调用公共控件库 API 通过包装函数名 AfxFunctionName,其中 FunctionName 是普通控件 API 的名称。 这些包装函数在 afxcomctl32.h 和 afxcomctl32.inl 定义。

可以使用 AFX_COMCTL32_IF_EXISTSAFX_COMCTL32_IF_EXISTS2 宏 (定义在 afxcomctl32.h) 确定公共控件库是否实现某些 API 而不是调用 GetProcAddress

在技术上,则调用公共控件库 API 通过包装类, CComCtlWrapper (定义在 afxcomctl32.h)。 CComCtlWrapper 为加载和卸载还负责 comctl32.dll。 MFC 模块状态包含指向 CComCtlWrapper实例。 使用 afxComCtlWrapper 宏,可以访问包装类。

请注意直接调用公共控件 API 的, (不使用 MFC 包装函数) 从 MFC 应用程序或用户 DLL 在大多数情况下,仍有效,因为它在其清单请求) 的 MFC 应用程序或用户 DLL 绑定到公共控件库。 但是,在中,因为 MFC 代码可能从不同的公共控件库版本,用户 DLL 调用 MFC 代码必须使用包装。