2008-12-04 7 views
6

Est-il possible de modifier les ressources d'un exécutable lors de l'exécution par programmation? Si c'est le cas, comment? Sinon, existe-t-il un autre programme qui peut facilement être utilisé pour modifier les ressources?C++ modifier les ressources au moment de l'exécution

Merci, Derek.

+0

Voulez-vous dire les ressources Windows? Ceci est spécifique à la plate-forme, oui? –

Répondre

0

Oui, c'est possible, mais pas particulièrement facile. Cela nécessite essentiellement d'écrire un compilateur de ressources (au moins pour les types de ressources que vous voulez modifier).

Par exemple, j'ai déjà écrit un compilateur de menu qui a sorti son entrée d'une base de données à l'exécution (puis sauvegardé le résultat dans la base de données). Si les tables source étaient inchangées, la ressource existante était utilisée, sinon elle était reconstruite. Dans le cas des ressources de menu (et je crois que les boîtes de dialogue), le bit délicat est que certains membres ne sont présents qu'en fonction des paramètres du drapeau, ainsi que des exigences d'alignement strictes. Dans le cas de la modification de ressources déjà présentes dans votre fichier .exe, vous devez copier les données de ressource dans un tampon mémoire (avec un espace supplémentaire disponible si vous ajoutez de nouveaux éléments) (en utilisant FindResource, LockResource, une copie de mémoire). puis UnlockResource). Après avoir effectué les modifications, utilisez l'une des fonctions de création indirecte (à savoir CreateMenuIndirect) et transmettez l'adresse du tampon.

L'API de ressources permet d'écrire un tel tampon dans le binaire de l'application mais cela casserait la signature si vous utilisez la signature de code, alors soyez très prudent. Je ne sais pas non plus si cette API fonctionne pour un programme en cours d'exécution.

Questions connexes