【问题标题】:How can I combine two resource into one project in VC++?如何在 VC++ 中将两种资源合并到一个项目中?
【发布时间】:2014-12-30 13:48:16
【问题描述】:

我有两个项目,Project1 和 Project2,两个项目都有 rc 文件(resource.h), 我想将两个资源合并到一个项目中,例如在Project1中,我可以使用两个资源:Project1的rc和Project2'2 rc; 我能怎么做?谢谢

【问题讨论】:

  • 普通的拖放是否有效?我记得在一个项目中拉了两个 .rc 文件。或者,看看你是否可以右键单击并导入现有的 rc 文件。
  • 您是否尝试过在 Visual Studio 中分别编辑这两个 .rc 文件?然后,您可以剪切/复制/粘贴对话框、菜单等。
  • 您可以进行纯文本合并 - 只需复制粘贴任何相关部分。请注意,合并取决于资源类型,例如对于对话框,您需要复制对话框定义,对于文本字符串,您需要将所有条目合并到一个表中,对于版本,您需要选择任何相关的版本部分(我认为您不能在一个 .rc 中有两个版本部分文件)。
  • 另外,确保您的resource.h 文件被合并,或者一个包含到另一个中,以便定义所有资源标识符。请注意,您可能需要解决编号冲突。

标签: visual-c++ mfc


【解决方案1】:

可以通过使用here提到的TEXTINCLUDE资源指令来实现

基本思路是在彼此的rc文件中包含需要的rc文件,就像我们包含头文件一样。

例如,在 Project1.rc 中,您可以包含 Project2.rc,如下所示。

#ifdef APSTUDIO_INVOKED

// ... other directives if any

3 TEXTINCLUDE 
BEGIN
    // ... other definitions
    "#include ""Project2\\Project2.rc""\0"
END

#endif    // APSTUDIO_INVOKED


//... other resource entries


#ifndef APSTUDIO_INVOKED

#include "Project2\\Project2.rc"

#endif    // not APSTUDIO_INVOKED

现在修改 Project2.rc 以包含 Project1.rc,如上所示。

【讨论】:

  • .rc 文件包含某些只存在一次的部分,例如版本或包含 VS 资源编辑器的部分。不确定当您最终在同一个文件中拥有两个副本时会发生什么。可能需要修剪其中一个文件以仅保留一份副本。
  • 如您所知,任何 RC 资源条目都有自己的唯一 ID。如果有两个(不同的)资源具有相同的 ID,则资源编译器将报告“重复资源”错误。采用上述策略时,无需修剪。
  • 嗯,不,不是真的。资源 ID 不会凭空出现。它们都在 resource.h 文件中定义。因此,如果您只是简单地组合两个 .rc 文件,您会遇到某些问题。首先,不能保证 resource.h 定义了新添加的 .rc 文件使用的 ID。其次,您需要确保新 ID 的数值与现有 ID 不同。最后,尝试在合并的 .rc 中包含两个版本信息副本,看看会发生什么。
  • 当Project2.rc被包含在Project1.rc中时,Project2的resource.h文件也会被#包含。这是因为 Project2.rc 本身包含语句#include "resource.h"。引用微软的话,“Visual C++ 将单个 .RC 资源文件和相应的 .H 头文件作为一对紧耦合的文件进行管理。”因此,有一种保证。至于第二个问题,微软提倡使用共享资源头文件,如here 解释。为避免版本冲突,应将其保存在非共享的 .RC 文件中。
猜你喜欢
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多