Можно ли изменить уже загруженный ресурс? - PullRequest
4 голосов
/ 16 декабря 2011

Я использую класс TResourceStream для чтения ресурса, знаю, что хочу изменить ресурс в памяти, но документация по методу Write вышеприведенного класса гласит:

Приложения не должны использовать TResourceStream для записи ресурсов работающего приложения.Write переопределяет унаследованный метод, чтобы вызвать исключение EStreamError, когда приложение пытается выполнить запись в ресурсы приложения.

Как и все другие методы записи данных, TResourceStream (WriteBuffer, WriteComponent) вызывает метод Write для фактической записи, вызываялюбой из методов записи данных TResourceStream вызовет исключение.

Вопрос в том, есть ли способ изменить ресурс в моем работающем приложении, используя любую функцию WinApi?или ресурсы только для чтения?

1 Ответ

8 голосов
/ 16 декабря 2011

Ресурсы - это просто указатели на некоторую исполняемую часть, отображаемую в памяти.

Таким образом, вы можете изменить эту память, используя VirtualProtectEx, точно так же, как вы можете исправить любую часть кода.

См. Хорошо, чтобы использовать VirtualProtect для изменения ресурса в Delphi? об этой технике (здесь о ресурсной строке, но тот же API можно использовать для любого заблокированного ресурса).

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