Ressourcen zur Laufzeit ändern



  • Hiho,

    ich habe eine String-Table in meinem MFC-Programm. Ist es irgendwie möglich, die Strings, welche sich hinter der ID verbergen, zu verändert? Also faktisch ein

    SetResource(ID_STRING_11,"New String Resource text");
    

    VG

    Pellaeon




  • Mod

    Da ein Programm allerdings meistesn in einem Ordner steht auf den man keine Schreibzugriffe hat ist solch ein Versuch unsinnig in meinen Augen.



  • Die Ressourcen in der exe direkt wollte ich nicht ändern, sondern nur die Ressourcen-Texte zur Laufzeit. Folgender Hintergrund: das Programm gibt es für verschiedene Sprachen und die Texte sind in einer String Table bei den Ressourcen hinterlegt. Für eine andere Sprache muss nur eine andere DLL geladen werden, welche die anderen Ressourcen mit denselben IDs enthält usw. Gabs da nicht sogar einen Blogeintrag von dir drüber, Martin?

    Naja jedenfalls besteht jetzt der Wunsch, gewisse Texte zusätzlich über eine xml-Datei anpassen zu können. Wenn es jetzt so einen imaginären Befehl wie in meinem 1. Post gäbe, müsste ich am Programm nichts weiter ändern, sondern nur im init faktisch die Ressourcen mit den neu gewünschten Texten updaten. Alternative ist es, überall wo die Texte mit LoadString in CStrings geladen werden, mit einem anderen Mechanismus auszustatten. Meine bisherige google-Recherche hat da noch nichts brauchbares an das Tageslicht befördert.

    VG

    Pellaeon


  • Mod

    Damit änderst Du aber nicht die Ressourcem sondern legst Satelite DLLs an.
    BTW: Das war ein Artikel aus grauer Vorzeit und kein Blog Eintrag 😉



  • Laut "MFC-Entwicklerworkshop" lassen sich verschiedene Sprach-DLLs mit einer
    MFC-DLL für Resourcen realisieren. Diese wird mit LoadLibrary() geladen und dann mit
    AfxSetResourceHandle() gesetzt. Danach werden Resourcen in der DLL gesucht.

    Sollen die DLLs nun dynamisch verändert werden ?



  • Hiho,

    danke für die Antworten, aber das mit den Ressourcen-DLL ist ja der aktuelle Zustand. 🙂 Läuft auch schon ne ganze Weile, obs jetzt graue Vorzeit ist kA, aber ein paar Jahre sind es schon ;).
    Jetzt kam der Wunsch auf, bestimmte Texte per XML anpassen zu können. Um jetzt nicht an jeder Stelle im Quellcode, wo LoadString(IDS_...) steht was ändern zu müssen, war mein Gedanke, evtl kann man die String Table ja verändern im Speicher. Und dazu habe ich aber noch nichts gefunden. Das war der Gedankengang, wo ich keine Umsetzung bisher finden konnte

    VG

    Pellaeon


  • Mod

    Du könntest eine Dummy-DLL bauen und diese "befüttern".

    Aber ich finde es Overkill, so etwa "umzubiegen" um nur wieder die Windows API mit LoadString ins Spiel zu bringen.
    Dann ändere doch besser den Zugriff auf die Stringressourcen.


Anmelden zum Antworten