Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Ändern eines Resource Strings in einer DLL

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.07.2012, 13:07 Uhr
~-Capris-
Gast


Hallo,

ich möchte einen Resource String in einer Dll ändern. Habe mich ein bisschen schlau gemacht und gefunden, dass man dazu die Funktion UpdateResource verwenden kann. Leider funktioniert es bei mir trotzdem nicht.

Also, die Frage ist, wie macht man das am einfachsten?


Hier mein Code:


C++:
BOOL SetResourceFile(LPCTSTR szSSPath, LPCTSTR szSSName)
{
    //HRSRC hResLoad;    
    HMODULE hExe;      
    HRSRC hRes;        
    HANDLE hUpdateRes;  
    CString myTest = _T("myTest");
    //char *lpResLock;
    BOOL result;

    // funktioniert
    hExe = LoadLibrary(szSSPath);

    // funktioniert NICHT (NULL)
    hRes = FindResource(hExe, (LPCWSTR)"IDS_TEST", RT_STRING);


    // Open the file to which you want to add the dialog box resource.
    // OK
    hUpdateRes = BeginUpdateResource(szSSPath, FALSE);
    
    //auf diese Weise kann auch auf den String zugreifen (IDS_TEST = 43142)
    CString myStr;
    myStr.LoadString(hExe, 46142);

        // hier ist der result == 1, aber verändert hat sich trotzdem nichts
    result = UpdateResource(hUpdateRes, RT_STRING, (LPCWSTR)"IDS_TEST",
        MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN), &myTest, myTest.GetAllocLength());
    
    // Write changes and then close it.
    EndUpdateResource(hUpdateRes, FALSE);
    

    return false;
}




Ich denke, ich habe so ziemlich alles Mögliche falsch gemacht. Deswegen wäre ich für eure Hilfe sehr dankbar!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.07.2012, 14:23 Uhr
TOSHMAX



So wie es aussieht, ist IDS_TEST nur ein Macro das in der Resource-Datei zu 46142 expandiert. Das heißt, deine Aufrufe müssten so aussehen:

C++:
hRes = FindResource(hExe, MAKEINTRESOURCE(46142), RT_STRING);
...
result = UpdateResource(hUpdateRes, RT_STRING, MAKEINTRESOURCE(46142),
        MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN), &myTest, myTest.GetAllocLength());
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.07.2012, 15:02 Uhr
~-Capris-
Gast


Habe das auch schon mal ausprobiert, aber das MAKEINTRESOURCE(46142) bringt immer einen leeren String. Ich denke, er sucht an einer falschen Stelle, weiß aber nicht, wie man's anders macht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.07.2012, 20:01 Uhr
TOSHMAX



Kannst du mal den Ausschnitt aus der Resource-Datei posten, in dem der String um den es geht definiert wird? Evtl. auch das Makro "IDS_TEST" falls vorhanden.
Ansonsten könntest du auch mal dein Programm mit einem Resource-Editor ansehen, um zu sehen ob wirklich alles korrekt ist. So einen bekommst du z. B. hier: http://melander.dk/reseditor/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.07.2012, 12:29 Uhr
~-Capris-
Gast


Hey TOSHMAX,

danke für die Antwort... Aber ich bin schon mehr oder weniger auf die Lösung gekommen...
Ich blicks zwar nicht durch, aber es funktioniert...

Und zwar hat mein Problem etwas mit Unicodes zu tun. Die Strings sind in Blöcken kodiert, deswegen musste ich folgenden Aufruf machen:


C++:
result = UpdateResource(hUpdateRes, RT_STRING, MAKEINTRESOURCE(46142 / 16 + 1),
        MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN), &myTest, myTest.GetAllocLength());




Hier vielleicht ein hilfreicher Link:

http://support.microsoft.com/kb/196774/en-us

nochmal danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: