2008-12-04 7 views
6

Ist es möglich, Ressourcen für eine ausführbare Datei zur Laufzeit programmgesteuert zu bearbeiten? Wenn das so ist, wie? Wenn nicht, gibt es ein anderes Programm, das leicht zum Ändern von Ressourcen verwendet werden kann?C++ Ressourcen zur Laufzeit ändern

Danke, Derek.

+0

Meinst du Windows-Ressourcen? Das ist plattformspezifisch, ja? –

Antwort

0

Ja, es ist möglich, aber nicht besonders einfach. Es erfordert grundsätzlich das Schreiben eines Ressourcencompilers (zumindest für die Ressourcentypen, die Sie ändern möchten).

Zum Beispiel schrieb ich einmal einen Menü-Compiler, der seine Eingabe zur Laufzeit aus einer Datenbank nahm (um dann das Ergebnis zurück in die Datenbank zu speichern). Wenn die Quellentabellen unverändert waren, wurde die vorhandene Ressource verwendet, andernfalls wurde sie neu erstellt.

Im Falle von Menü-Ressourcen (und ich glaube Dialoge) ist das schwierige Teil, dass bestimmte Mitglieder nur vorhanden sind, abhängig von Flag-Einstellungen, sowie strenge Ausrichtung Anforderungen.

Wenn Sie Ressourcen modifizieren, die bereits in Ihrer .exe vorhanden sind, müssen Sie die Ressourcendaten in einen Speicherpuffer kopieren (mit zusätzlichem Speicherplatz, wenn Sie neue Elemente hinzufügen) (mithilfe von FindResource, LockResource, einer Speicherkopie) dann UnlockResource).

Nachdem Sie die Änderungen vorgenommen haben, verwenden Sie dann eine der indirekten create-Funktionen (z. B. CreateMenuIndirect) und übergeben die Adresse des Puffers.

Die Ressourcen-API ermöglicht das Schreiben eines solchen Puffers zurück in die Binärdatei der Anwendung, aber das würde die Signatur unterbrechen, wenn Sie Codesignatur verwenden, also seien Sie sehr vorsichtig. Ich weiß auch nicht, ob diese API für ein Programm funktioniert, das tatsächlich ausgeführt wird.