MFC: переопределение пути растрового изображения в файле RC в спутниковой DLL

У меня есть основной исполняемый файл, который использует следующие файлы RC:

  • main.rc
  • bitmaps.rc

main.rc будут #include bitmaps.rc,

Я хотел бы, чтобы растровые изображения (и другие ресурсы) могли быть заменены во время выполнения, поэтому я решил использовать подход DLL и поменять ресурс с помощью AfxSetResourceHandle,

Мой текущий подход: в проекте спутниковой DLL это RC-файл просто сделает #include main.rc сначала захватить все ресурсы из основного исполняемого файла. Затем я заменяю определенные растровые изображения (только несколько, которые требуют изменения), используя следующее:

#undef IDB_ICON
IDB_ICON    BITMAP    "..\\newIcon.bmp"

#undef IDB_ABOUT
IDB_ABOUT   BITMAP    "..\\newAbout.bmp"

#undef заставляет его компилироваться, не выпуская ошибку "дубликата ресурса". Однако замена не работает во время выполнения.

Единственный способ заставить его работать - это воспроизвести bitmaps.rc как bitmapsSatellite.rc в спутниковом проекте, а затем сделайте несколько обменов путями. И, конечно же, main.rc был изменен, чтобы включить только один растровый файл RC, в зависимости от проекта.

Мой желаемый подход был бы чище и понятен. Есть ли способ заставить его работать, возможно, используя что-то, кроме #undef?

1 ответ

Вам не нужно отменять определения идентификаторов ресурсов.

Ресурсы с одинаковым идентификатором могут существовать с разными идентификаторами языка в одном файле ресурсов.

Чтобы разделить их, легко скомпилировать RC-файл с параметром командной строки, который предопределен AFX_RESOURCE_DLL,

когда AFX_RESOURCE_DLL определяется для компилятора ресурсов, он включает в себя только ресурсы для языка, который также определяется в командной строке, как AFX_TARG_ENU или же AFX_TARG_DEU,

Для ресурсов, которые всегда могут быть включены в satelaite DLL, которую я использую AFX_TARG_NEUD (Нейтральный ресурс).

Таким образом, у вас могут быть все ресурсы в одном файле, или у вас могут быть ресурсы, распределенные по нескольким файлам RC. Вы можете включить все необходимые файлы ресурсов в один процесс компиляции через #include Заявление, и вы можете выбрать нужный язык с помощью командной строки определить.

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