【问题标题】:fatal error CVT1100: duplicate resource. type:ICON, name:1 (C++, Visual Studio C++ 2010)致命错误 CVT1100:重复资源。类型:ICON,名称:1(C++,Visual Studio C++ 2010)
【发布时间】:2015-09-28 04:32:27
【问题描述】:

我尝试将自定义图标(13x13 尺寸)添加到项目中。

我找不到无法加载图标的原因。

CVTRES:致命错误 CVT1100:重复资源。类型:图标,名称:1, 语言:0x0409 链接:致命错误 LNK1123:转换失败 到 COFF:文件无效或损坏

resource.h 中的一些信息:

#define IDI_LOGO   16   //0x10 - no problem here
...
/* Bitmaps */
#define IDB_LOGO            200
#define IDB_GOOD            201
#define IDB_EVIL            202

/* Icons */
#define IDI_TERRAIN 90 // problem starts here
#define IDI_ELEV    91
#define IDI_DRAWREPLACE 92
#define IDI_DRAWFILL    93
#define IDI_DRAWBRUSH   94

common.rc:

#include "resource.h"
/* Bitmaps */ // no problem
#define IDB_LOGO            200
#define IDB_GOOD            201
#define IDB_EVIL            202

/* Icons */ // problem:
#define IDI_TERRAIN 90
#define IDI_ELEV    91
#define IDI_DRAWREPLACE 92
#define IDI_DRAWFILL    93
#define IDI_DRAWBRUSH   94

file2.rc:

#include "resource.h"
IDI_LOGO    ICON    DISCARDABLE "res/swgbts.ico"






#include "resource.h"
IDI_LOGO    ICON    DISCARDABLE "res/aokts.ico"

我试图改变IDI_TERRAIN和其他图标的id,没有帮助。

据此: https://msdn.microsoft.com/en-us/library/b1kw34cb%28v=vs.80%29.aspx 我尝试更改号码,没有帮助

请注意,如果我注释掉有问题的行,则会加载 IDI_LOGO。 有什么帮助吗?

错误在resource.h中 Visual Studio C++ 2010,Windows XP

【问题讨论】:

    标签: c++ resources icons


    【解决方案1】:

    我遇到了同样的问题。似乎不可能合并.rc。文件,如果他们都有图标。尽管您可能有不重叠的编号方案。

    请参阅以下来自 Microsoft 的解释:Gary Chang 已在网络其他地方发布了此 interesting explanation

    以下是有关此问题根本原因的更多详细信息: “基本上发生的事情是 Icon 资源由两个 不同的 Win32 资源类型 C RT_GROUP_ICONRT_ICON。你可以想 RT_GROUP_ICON 作为 RT_ICON 资源的目录。 RT_ICON 资源是实际的图标图像。

    VC 资源编辑器尝试通过一个图标为您简化此操作 资源实体并在后台处理一些事情,如创建和 ID 个人RT_ICON 资源的命名(您在此看到的#1 案子)。 VC 资源编辑器也是在它诞生的时候创建的 在给定的.exe.dll 中只能有一个.rc 文件。变化 此后已在命令行工具中制作了允许使用多个 .rc 文件为给定的.exe.dll 做出贡献,但我不相信 资源编辑器的实现曾经以这种新的可能性重新审视 请记住,至少从它处理图标的方式来看。

    所以用当前的 VC++ 编译器,唯一能做的就是 如果您想要拥有多个资源文件的情况是保留所有图标(和 cursor) 资源在单个.rc 文件中。这将使VC资源 编辑器使所有 RT_ICON 标识符保持唯一。"

    希望对您有所帮助,感谢您的理解! 最好的问候,

    张加里 微软社区支持

    【讨论】:

    • 我现在将图标作为原始RCDATA 存储在“主”项目“包含”的资源文件中。现在CVTRES 可以合并编译好的资源文件了。我还包含了对话框资源,但与图标不同,CVTRES 很好。困难的部分是获得HICON。为此,我必须使用从LookupIconIdFromDirectoryEx 获得的位调用CreateIconFromResourceEx。在此之前,必须通过函数FindResourceLoadResourceLockResourceVirtualProtect 等获取指向原始 ICO 文件字节(来自资源)的指针。
    • 这里有趣的是来自 Gary Chang 的这句话,来自上面的链接: > 所以用当前的 VC 资源编译器,恐怕没有办法这样做,但我们的产品团队成员会在未来修复它。 恰好在 14(十四)年前说过。但同样的问题在 2019 年依然存在。
    • 更有趣的是,没有人(包括我)提交错误报告。所以我就这么做了。
    • 保持联系以获取任何相关新闻)
    【解决方案2】:

    我解决了这个问题。

    我已将一个 .rc 文件的内容移至主 rc 文件。编译器在包含来自两个资源的 ICON 时遇到问题。我不知道为什么,但这是一个清晰而简单的解决方案。

    【讨论】:

      【解决方案3】:

      对我来说,它只是有重复的资源 ID。

      #define IDB_LOGO            200
      ...
      #define IDB_EVIL            200
      

      更换其中一个即可解决问题。

      【讨论】:

        【解决方案4】:

        我在 VC 2015 中遇到了这个问题,但在小改动时出现了错误

        2>CVTRES:致命错误 CVT1100:重复资源。类型:对话, 名称:564,语言:0x041B 2>LINK : 致命错误 LNK1123: 期间失败 转换为 COFF:文件无效或损坏

        我在 *.vcxproj 中有任何 *.rc 文件,而我的 resource.h 是:

        #define IDC_1  100
        #define IDR_1  101
        //etc
        //about 
        #define IDXXX_XXX  12000
        //and
        #define ID_1 32769
        //etc
        

        在“IDXXX_XXX”重新编号和重建后,我将定义从 100 替换为 999。 这样问题就解决了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-09
          • 1970-01-01
          • 2016-01-24
          相关资源
          最近更新 更多