导出的DLL函数入口点

对于 DLL 的导出函数,将从 DLL 模块到调用应用程序的 DLL 时,,请使用 AFX_MANAGE_STATE 宏维护适当的全局状态。

当调用,此宏设置 pModuleState,转到包含全局数据为模块的 AFX_MODULE_STATE 结构的指针,作为函数的包含范围的余数的有效模块状态。 在离开包含宏的范围后,自动还原上一个有效的模块状态。

此切换构造实例在堆栈的 AFX_MODULE_STATE 类来完成。 在其构造函数,此类在成员变量获取指向当前模块的状态并将其存储,然后设置 pModuleState 作为新活动模块状态。 在此析构函数,此类以其成员变量存储的指针为有效模块状态。

如果您有一个导出函数,例如生成在 DLL 的对话框的一个,需要添加以下代码添加到该函数的开头:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

此交换与直至当前范围的结束的 AfxGetStaticModuleState 返回的状态的当前模块的状态。

; 如果没有使用,资源的问题在于 DLL 将发生 AFX_MANAGE_STATE 宏。 默认情况下, MFC 使用主应用程序的资源句柄加载资源模板。 此模板在 DLL 确实存储。 原因是 MFC 的模块状态信息不是由 AFX_MANAGE_STATE 宏切换。 资源句柄从 MFC 的模块状态恢复。 导致错误的资源句柄使用不切换模块状态。

AFX_MANAGE_STATE 在 DLL 不需要放置到每个功能。 例如, InitInstance 可以由应用程序的 MFC 代码调用,而无需 AFX_MANAGE_STATE ,因为 MFC 在 InitInstance 然后切换之前自动转换模块状态它,请在 InitInstance 返回之后。 上述情况同样适用于所有消息映射处理程序。 规则 DLL 确实存在特定主窗口过程该自动切换模块状态在路由任何消息之前。

请参见

概念

管理MFC模块状态数据