MFC: переопределение пути растрового изображения в файле RC в спутниковой DLL - PullRequest
0 голосов
/ 07 мая 2018

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

  • main.rc
  • bitmaps.rc

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

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

Мой текущий подход: В проекте Satellite 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 Ответ

0 голосов
/ 07 мая 2018

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...