Рейтинг:
12
Jochen Arndt
Видеть TN035: использование нескольких файлов ресурсов и заголовочных файлов с Visual C++[^].
Для вашего случая вы должны отредактировать один из ресурса.ч файлы, отрегулируйте _APS_NEXT_*
значения внизу для новых ресурсов и настройте все существующие определения так, чтобы они были до следующих определений, но после определений, используемых до сих пор, плюс место для новых в другом файле. См. приведенную выше ссылку для допустимых диапазонов в разделе " Управление символами, совместно используемыми несколькими Visual C++ - Edited .RC-файлы".
Обратите внимание, что VS попросит вас перезагрузить файл при его редактировании во время открытия проекта. Примите это или лучше отредактируйте файл, когда соответствующий проект не открыт.
[РЕДАКТИРОВАТЬ]
Если необходимо поддерживать несколько библиотек DLL расширений, следует указать, что библиотеки DLL должны загружать ресурсы с помощью своих HMODULE
с LoadResource()
и HINSTANCE
с другими функциями нагрузки.
Если библиотеки DLL используют MFC, они должны получить и сохранить текущий дескриптор ресурса с помощью AfxGetResourceHandle()
, передайте их ручку AfxSetResourceHandle()
, и восстановите настройку после загрузки ресурса. Смотреть также библиотека DLL расширения[^].
[/РЕДАКТИРОВАТЬ]
SheepSpeech
Привет,
Спасибо за ваш ответ. Я предполагаю, что ресурсы будут просто увеличиваться на единицу каждый раз, когда они будут добавлены в проект.
Однако моя конечная цель состоит в том, чтобы позволить другим людям создавать DLL расширения MFC для моего приложения. Я хотел бы найти решение, которое позволит избежать любого конфликта (и избежать необходимости устанавливать диапазон), потому что люди не будут знать диапазон, используемый основным приложением и другими расширениями.
Jochen Arndt
Это не было упомянуто в вашем первоначальном вопросе.
Я обновлю свой ответ.
SheepSpeech
Спасибо, я попробую это сделать и дам вам обратную связь !
SheepSpeech
Мне нужен совет:
Я просто хочу проверить что-то в диалоге моего расширения, поэтому я хотел бы быстро изменить значение _APS_NEXT_*_VALUE. Однако, когда я это делаю, мой диалог больше не появляется + его идентификатор не изменяется в resource. h. что я должен делать?
Кроме того, _APS_NEXT_*_VALUE-это следующее значение для текущего проекта, это нижний предел, верно?
Jochen Arndt
Следующие значения используются для новых ресурсов. Когда один добавляется, соответствующее следующее значение увеличивается. Существующие определения необходимо редактировать вручную.
SheepSpeech
Привет,
У меня есть еще один вопрос:в какой ситуации может произойти эта проблема с идентификатором? Потому что у меня была такая проблема, когда я пытался создать окно из идентификатора шаблона, т. е. таким образом:
CDialog myDlg(IDD_DIALOG1);
myDlg.Метод domodal();
Но у меня его больше нет, если я создаю свое окно с помощью класса, таким образом:
PluginDialog ДЛГ;
ДЛГ.Метод domodal();
Это случайность, или в данном случае я никак не могу получить конфликт идентификаторов? Мне нужны кое-какие объяснения.
Спасибо!
Jochen Arndt
Идентификаторы создаются при использовании редактора ресурсов. Это позволит выбрать следующее, используя соответствующее следующее значение из файла resource. h, добавить его в файл и увеличить следующее значение.
Если вы что-то меняете вручную, вы несете ответственность за то, чтобы все используемые идентификаторы существовали и чтобы не было дубликатов. Идентификаторы, которые не используются anmyore, не вредят. Они не будут конфликтовать с новыми идентификаторами, поскольку значение меньше фактического следующего значения.