Ressourcen updaten



  • Hi,

    ich versuche gerade von meinem Programm aus Ressourcen in ein anderes einzufügen bzw. zu bearbeiten. Folgender Code:

    BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam)
    {
    	//Wird nicht aufgerufen
    	MessageBox(0, lpszName, lpszType, 0);
    	return TRUE;
    }
    
    BOOL CALLBACK EnumResTypeProc(HMODULE hModule, LPTSTR lpszType, LONG_PTR lParam)
    {
    	//Funktioniert
    	MessageBox(0, lpszType, 0, 0);
    	EnumResourceNames(hModule, lpszType, EnumResNameProc, 0);
    	return TRUE;
    }
    
    //...
    
    //Neue Funktion .. {
    
    	HMODULE hModule = LoadLibrary(pcExePath);
    	if(!hModule)
    		return FALSE;
    
    	// ...
    
    	//Versuch vorhandene Ressourcen zu suchen ... s.o.
    	EnumResourceTypes(hModule, EnumResTypeProc, 0);
    
    	//Test, ob die Ressource wirklich da ist -> funktioniert
    	HRSRC hResource = FindResource(hModule, MAKEINTRESOURCE(104), "RAW");
    	if(!hResource)
    		return FALSE;
    
    	HGLOBAL hGlobal = LoadResource(hModule, hResource);
    	if(!hGlobal)
    		return FALSE;
    
    	MessageBox(0, (char*)LockResource(hGlobal), 0, 0);
    	//------------------------------------------------------
    
    	//Tut nichts
    	HANDLE hResourceUpdate = BeginUpdateResource(pcExePath, FALSE);
    	if(!hResourceUpdate)
    		return FALSE;
    
    	if(!UpdateResource(hResourceUpdate, "RAW", MAKEINTRESOURCE(104), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), pData, GetFileSize(hOutputFile, NULL)))
    		return FALSE;
    
    	if(!EndUpdateResource(hResourceUpdate, FALSE))
    		return FALSE;
    	//----------
    

    An den Kommentaren könnt ihr ablesen, was in der betreffenden Abschnitt nicht stimmt.

    Es sollten eigentlich:
    - alle vorhandenen Ressourcen und Typen aufgezählt werden <- funktioniert nicht
    - Inhalt einer Ressource ausgeben <- funktioniert
    - den Inhalt der Ressource mit dem Inhalt einer Datei (siehe hOutputFile) 'aufgefüllt' werden und in die .exe schreiben <- funktioniert nicht

    Was kann ich ändern, damit die "Es sollten eigentlich"-Aufgaben erfüllt werden?

    Danke im Voraus

    M.T.



  • Was genau heißt "Tut nichts" bei BeginUpdateResource? Ist hResourceUpdate NULL?

    Vielleicht helfen die diese Code-Schnippsel etwas 🤡



  • flenders schrieb:

    Ist hResourceUpdate NULL?

    Unwahrscheinlich ... dann würde die Funktion ja FALSE statt TRUE zurückgeben 😉

    Der Code-Schnipsel in der MSDN war ursprünglich schon meine Quelle ...

    Da muss noch was sein

    M.T.


Anmelden zum Antworten