VS2015 MFC - 如何将静态库资源链接到项目

Posted

技术标签:

【中文标题】VS2015 MFC - 如何将静态库资源链接到项目【英文标题】:VS2015 MFC - How to Link a Static Library Resources to a project 【发布时间】:2017-05-16 03:38:24 【问题描述】:

加入 .rc/resource.h 文件的问题

所以过去 4 天我一直在研究这个问题,但我似乎找不到有效的答案。我找到了一些关于如何做到这一点的旧资源,但在 VS2015 中找不到如何做到这一点。

我正在构建一个 MFC 功能区应用程序,它使用静态库扩展名义上的 Office2007 主题。问题是我想将资源存储在库中而不是项目本身中,因为我想稍后以最小的开销重用这个库。我知道主题代码可以完美运行,因为当您从 lib .rc 和 resource.h 文件中移动资源声明并将它们放入项目 .rc/resource.h 文件中时,libs 函数可以完美运行。

我知道项目设置中的路径是正确的,因为程序编译时没有警告或错误。当您在激活我的自定义主题时逐行执行代码时,它会在查找 Style.XML 文件时中断。

我已经将我的 lib 的 .rc/resource.h 文件包含在我的主项目的 .rc 文件中,并且我已经在配置属性/资源/常规/附加包含目录中添加了正确的资源路径。

然而,这似乎没有起作用,因为当我解压缩生成的 .exe 时,资源不在那里。

Tl;Dr 如何将 .png/.xml 资源从静态库链接/包含到 MFC 项目?

link to the resource I used to get this far

任何帮助表示赞赏!谢谢!!

【问题讨论】:

静态库不能包含资源。 .lib 文件格式根本没有对此的规定。您应该能够将您的 .rc 文件编译为 .res,并与之链接。 我应该澄清一下。 lib 项目有自己的 .rc 和 resource.h 文件,允许我将资源嵌入到该项目中。据我了解,我需要将它们分别链接到主项目以及链接 .lib 文件。问题是,一旦我按照原始帖子中包含的链接上的说明进行操作,它们就无法通过。 【参考方案1】:

所以我现在已经解决了这个问题。事实证明,我的 lib 项目 .rc 文件没有被正确编译成 .res 文件。一旦我从我的项目目录中删除了有问题的 .rc 文件并从头开始重写它,它就会正确编译。一旦我这样做并在整个解决方案上进行了清理/重建,它就会再次开始工作,现在资源在 .exe 中正确显示并且我的自定义主题工作正常!

基本上,我在原始问题中包含的链接中概述的过程按照指定的方式工作,除非 VS 决定不正确地完成它的工作!

如果其他人遇到这个问题。使用第三方资源编辑器解压缩您的 .res 文件,并确保它们正在正确编译。这个问题是一个沉默的时间杀手!

【讨论】:

资源编译器已经使用了数十年,被数百万个应用程序使用。几乎可以肯定,问题出在您的构建系统/项目配置中。不过,目前还不清楚“问题” 是什么,或者这个提议的答案如何解决它。也不确定你认为哪个部分是“沉默的时间杀手”。最可能的原因:您将错误的模块句柄传递给资源查找函数(请参阅Accessing the current module’s HINSTANCE from a static library)。

以上是关于VS2015 MFC - 如何将静态库资源链接到项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VS2015 中调试 Clang 静态链接库

如何将静态库添加到 VS 2015 Fortran 项目?

MFC如何使用静态MFC库

VS2010添加外来库设置

在VS2015中用C++创建MFC规则动态库DLL

静态库链接、c++、VS Express 2013