2008-12-04 5 views
6

Можно ли программно редактировать ресурсы для исполняемого файла во время выполнения? Если да, то как? Если нет, есть ли другая программа, которая может быть легко использована для изменения ресурсов?C++ изменить ресурсы во время выполнения

Спасибо, Дерек.

+0

Вы имеете в виду Windows Resources? Это определенная платформа, да? – 2008-12-04 00:50:41

ответ

0

Да, это возможно, хотя и не особенно легко. В основном это требует написания компилятора ресурсов (по крайней мере, для типов ресурсов, которые вы хотите изменить).

Например, когда-то я написал компилятор меню, который вынул свой вход из базы данных во время выполнения (затем сохранил результат обратно в БД). Если исходные таблицы не изменились, то использовался существующий ресурс, иначе он был перестроен.

В случае ресурсов меню (и я считаю, что диалоги) сложный бит заключается в том, что некоторые члены присутствуют только в зависимости от настроек флага, а также от требований строгого выравнивания.

В случае изменения ресурсов, уже присутствующих в вашем .exe, вам необходимо скопировать данные ресурсов в буфер памяти (с дополнительным пространством, доступным, если вы добавляете новые элементы) (используя FindResource, LockResource, копию памяти затем UnlockResource).

После внесения изменений вы затем используете одну из косвенных функций создания (т. Е. CreateMenuIndirect) и передаете адрес буфера.

API-интерфейс ресурса позволяет записывать такой буфер обратно в двоичный файл приложения, но это может сломать подпись, если вы используете подписание кода, поэтому будьте очень осторожны. Я также не знаю, работает ли этот API для фактически запущенной программы.