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

时间:2009-02-10 08:36:31

标签: visual-c++ dll resources

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

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

2 个答案:

答案 0 :(得分:4)

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

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

检查technote here about MFC module state。有各种类型的MFC模块状态,模块状态是您最常与之交互的状态。

  

交换当前模块状态   与国家返回   AfxGetStaticModuleState直到结束   目前的范围。

     

DLL中的资源问题会   如果AFX_MODULE_STATE宏是,则会发生   不曾用过。默认情况下,MFC使用   主要的资源处理   应用程序加载资源   模板。实际上这个模板   存储在DLL中。根本原因是   那个MFC的模块状态信息   没有被切换过   AFX_MODULE_STATE宏。资源   句柄从MFC的模块中恢复   州。不切换模块状态   导致错误的资源句柄   使用

答案 1 :(得分:3)

来自MSDN

  

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

AFX_MANAGE_STATE(AfxGetStaticModuleState());