静态库中的对话框资源
Posted
技术标签:
【中文标题】静态库中的对话框资源【英文标题】:Dialog resources in a static library 【发布时间】:2019-10-09 14:13:47 【问题描述】:我的静态库中的对话框和图标资源有问题。 我用 Visual Studio 2008 创建了一个 MFC 静态库。
我正在从Win32
应用程序调用静态库中的Func()
,它试图在静态库中启动一个 MFC 对话框。
当我试图访问资源时,我得到 afxCurrentResourceHandle is NULL 断言。
我在Func()
中添加这一行AFX_MANAGE_STATE(AfxGetStaticModuleState());
作为第一行。但这没有帮助。
我只需要使用静态库。根据要求,我不应该使用 dll。
请帮助我如何从非 MFC 应用程序启动 MFC 静态库中的对话框。
【问题讨论】:
VC++ resources in a static library的可能重复 @Algirdas 你建议的链接不能解决问题。 OT:这个问题让我觉得离家很近,因为我目前正在修复一个缺陷,这是因为有人将代码移动到静态库(从 .dll),导致在某些对话框中无法显示.. "你建议的链接没有解决问题。"你想要什么解决方案?静态库不能包含嵌入式资源。链接的问题解释说,虽然提供了几种解决方案,但围绕这种限制。 是的,这就是我所看到的问题。请重新阅读重复的建议,以便您了解解决问题的可能方法。正如我已经说过的,它的 TLDR 版本:静态库不能包含资源。 【参考方案1】:这里的问题是静态库没有“关联的 .res 文件”。如果您尝试将带有资源的 DLL 迁移到静态库,那么您还需要将资源脚本(其 .rc
文件以及任何关联的 .rc2
文件和其他引用资源)“导出”到 客户端程序!
因此,就像您在 .cpp
源中拥有 #include "module.h"
行一样,您也需要在程序的主 .rc
文件中(或者,至少在文件中)拥有 #include "module.rc"
它包括)。
注意:人们尝试过的其他修复,例如显式链接额外的(预编译的).res
文件将不起作用!尽管二进制.res
文件的内部结构与任何其他.obj
文件非常相似,但链接器只会包含一个!
【讨论】:
如果使用 Visual Studio 资源编辑器,对 .rc 文件手动进行的任何更改都将丢失。因此,请注意通过 Visual Studio 的“资源包含”选项或通过 .rc2 文件包含其他 .rc 文件。 @Nick - 好点!我忘记了这一点,因为我在类似的要包含的资源脚本中/上禁用了可视资源编辑器的使用 - 所有这些都是 .rc2 文件,顺便说一句。以上是关于静态库中的对话框资源的主要内容,如果未能解决你的问题,请参考以下文章