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