UpdateResource & Strings
-
Hallo,
ich hab ein Problem mit dem Hinzufügen/Ändern eines Strings in ner externen Ressource.
Also kurz Suchfunktion genutzt und nen Thread gefunden, wo jmd. genau das selbe Problem hatte:
Informationen in andere EXE-Datei schreibenDa der Thread ziemlich alt ist, starte ich hier mal nen neuen...
Wo liegt denn nun genau das Problem?Hier der Source:
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HANDLE hUpdateRes; BOOL result; int an; char buff[] = "ein string"; wchar_t szBuffer[256]; an = MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), NULL, 0); MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), szBuffer, an); hUpdateRes = BeginUpdateResource("string.exe", TRUE); if(hUpdateRes == NULL) { MessageBox(NULL, "Datei kann nicht geöffnet werden.", "Fehler", MB_OK); return 1; } result = UpdateResource(hUpdateRes, RT_STRING, MAKEINTRESOURCE(101), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), szBuffer, 2*an); if(result == FALSE) { MessageBox(NULL, "Ressource konnte nicht hinzugefuegt werden.", "Fehler", MB_OK); return 2; } if(!EndUpdateResource(hUpdateRes, FALSE)) { MessageBox(NULL, "Aenderungen konnten nicht geschrieben werden.", "Fehler", MB_OK); return 3; } return 0; }Und wenn ich's mir dann mit "Resource Hacker" anschaue, kommt das bei raus:
STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US { 1600, "in string????????????????????????????????????????????????????????????????????????????????????????????" }
-
"szBuffer[0]" muß die Anzahl der Zeichen in "buff" enthalten.
Der String ansich darf erst bei "&szBuffer[1]" beginnen.
Anschließend muß die Länge noch korrigiert werden :... // MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), szBuffer, an); MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), &szBuffer[1], an); ... szBuffer[0] = strlen (buff); // <- fehlt noch ... result = UpdateResource(...,2*an+4); ...
-
Danke, funktioniert

Hätte nicht gedacht, dass ich so schnell ne Antwort bekomme.