Visual c++ 将资源构建到DLL中以供重用,MFC/VC++;

Visual c++ 将资源构建到DLL中以供重用,MFC/VC++;,visual-c++,dll,resources,Visual C++,Dll,Resources,例如,我想构建一个DLL,导出一个名为ShowDialog的函数,该函数显示一个对话框并更改其中一个对话框按钮中的文本。对话框和所有其他资源应捆绑在DLL中 我做了一个快速测试,当DLL使用某个控件ID尝试GetDlgItem()时,它会返回一个空指针。我假设在这种情况下需要更多的步骤来正确处理资源。来自: 默认情况下,MFC使用资源 要加载的主应用程序的句柄 资源模板。如果你有 DLL中导出的函数,例如 在对话框中启动对话框的程序 DLL,此模板实际上已存储 在DLL模块中。你需要换一下 模块

例如,我想构建一个DLL,导出一个名为ShowDialog的函数,该函数显示一个对话框并更改其中一个对话框按钮中的文本。对话框和所有其他资源应捆绑在DLL中

我做了一个快速测试,当DLL使用某个控件ID尝试GetDlgItem()时,它会返回一个空指针。我假设在这种情况下需要更多的步骤来正确处理资源。

来自:

默认情况下,MFC使用资源 要加载的主应用程序的句柄 资源模板。如果你有 DLL中导出的函数,例如 在对话框中启动对话框的程序 DLL,此模板实际上已存储 在DLL模块中。你需要换一下 模块状态是否正确 要使用的手柄。你可以这样做 将以下代码添加到 函数的开头:


在DLL的入口点是否执行以下操作

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
看看这个。有各种类型的MFC模块状态,模块状态是您最常用的交互方式

这将交换当前模块状态 随着国家从 AFXGetStaticModuleEstate直到结束 属于当前范围

DLL中的资源问题将 如果AFX_模块_状态宏为 没有用。默认情况下,MFC使用 主进程的资源句柄 应用程序来加载资源 模板。这个模板实际上是 存储在DLL中。根本原因是 该MFC的模块状态信息 未被服务器切换 AFX_模块_状态宏。资源 从MFC的模块中恢复句柄 国家。不切换模块状态 导致生成错误的资源句柄 用过


谢谢尽管这个回复包含更多信息,但我选择了另一个作为正确答案,因为在DLL的入口点调用AFX_MANAGE_STATE并不能解决问题。是的,它可以解决问题。DLL的入口点是外部代码可以调用到模块中的任何点。我猜你认为我指的是在德莱曼或类似的地方是的,很抱歉误会了。
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))