Фатальная ошибка CVT1100: дублированный ресурс. тип:ICON, имя:1 (C++, Visual Studio C++ 2010)

Я пытался добавить пользовательские иконки (размер 13x13) в проект.

Я не могу найти, почему я не могу загрузить значок.

CVTRES: фатальная ошибка CVT1100: дублированный ресурс. тип:ICON, имя: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 и другие значки, не помогло.

Согласно этому: https://msdn.microsoft.com/en-us/library/b1kw34cb%28v=vs.80%29.aspx Я пытался изменить номер, не помогло

Обратите внимание, что если я закомментирую проблемные строки, IDI_LOGO загружается. Любая помощь?

Ошибка в resource.h Visual Studio C++ 2010, Windows XP

4 ответа

Я столкнулся с той же проблемой. Похоже, невозможно объединить .rc, файлы, если они оба имеют значки. Несмотря на непересекающуюся схему нумерации, вы можете иметь.

См. Ниже объяснение от Microsoft: Гари Чанг опубликовал это интересное объяснение в другом месте в сети:

Ниже приведена более подробная информация об основной причине этой проблемы: "По сути, происходит то, что ресурсы Icon состоят из двух разных типов ресурсов Win32. C RT_GROUP_ICON а также RT_ICON, Вы можете думать о RT_GROUP_ICON как каталог RT_ICON Ресурсы. RT_ICON ресурсы являются фактическими изображениями значков.

Редактор ресурсов VC пытается упростить это для вас в виде единой сущности ресурса значков, а под капотом управляет некоторыми вещами, такими как создание и присвоение имен отдельным лицам. RT_ICON ресурсы (№ 1, который вы видите в этом случае). Редактор VC-ресурсов был создан еще в тот день, когда было возможно иметь только один .rc файл в данном .exe или же .dll, С тех пор в инструменты командной строки были внесены изменения, позволяющие использовать несколько файлов.rc для внесения вклада в данную .exe или же .dll но я не верю, что реализация редактора ресурсов когда-либо пересматривалась с учетом этой новой возможности, по крайней мере с точки зрения способа работы с иконками.

Так что с текущим компилятором VC++ единственное, что можно сделать в этом случае, если вы хотите иметь несколько файлов ресурсов, - это сохранить все ресурсы значков (и курсора) в одном .rc файл. Это позволит редактору ресурсов VC сохранить все RT_ICON идентификаторы уникальны."

Желаю, чтобы это помогло и спасибо за ваше понимание! С наилучшими пожеланиями,

Гари Чанг Поддержка сообщества Microsoft

Я решил проблему.

Я переместил содержимое одного файла.rc в основной файл rc. У компилятора возникла проблема с включением ICON из двух ресурсов. Я понятия не имею, почему, но это ясное и простое решение.

Для меня это просто дублированные идентификаторы ресурсов.

      #define IDB_LOGO            200
...
#define IDB_EVIL            200

Изменение одного из них решит проблему.

У меня была эта проблема в VC 2015, но при небольших изменениях ошибка

2>CVTRES: фатальная ошибка CVT1100: дублированный ресурс. тип: DIALOG, имя: 564, язык: 0x041B2> ССЫЛКА: фатальная ошибка LNK1123: сбой при преобразовании в COFF: файл недействителен или поврежден

У меня есть файлы * .rc в * .vcxproj, а мой resource.h:

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

Я заменил определения со 100 на 999 после перенумерации и пересборки "IDXXX_XXX". Итак, проблема решена.

Другие вопросы по тегам