Ressource einbinden und kopieren

RELAX

Grünschnabel
Tach Forum,

ich arbeite nur sehr selten mit Datenverwaltung ect...
Jetzt muss ich allerdings einen Patcher für ein installiertes
Programm schreiben.
Ich habe allerdings Probleme beim Handling mit Ressourcen.

Wie binde ich Ressourcen richtig ein?
Wie kopiere ich sie auf die Festplatte?

Ich finde oft was in Google(z.B:http://www.c-plusplus.de/forum/110456), allerdings hab ich
damit immer irgendwelche Probleme. :(

Ich vermute das ich die Ressource falsch einbinde
oder etwas anderes falsch mache. :suspekt:
Ich benutze Visual Studio 2010 hab aber auch CodeBlocks.

Gruß RELAX

PS: Ich habe Die Selbe Frage schon vor einigen Tagen in einem anderen Forum gefragt,
allerdings noch keine Antwort bekommen. Daher hab ich gedacht ich Versuchs mal hier.
Ich hoffe das es kein Problem darstellt, da ich die Lösung auch relativ dringend brauche.
 
Zuletzt bearbeitet:
Es sind verschiedene Dateien. .exe und .qqs (text Format) aber auch Bilder.
Aus C#(Einzige Sprache wo ich mal mit Ressourcen gearbeitet habe) kenn ich es so das es eigentlich egal ist was für eine Datei es ist. Man kann ne .txt auch als eine .exe abspeichern, und je nachdem was drinsteht funktioniert die .exe dann sogar auch... (davor die .exe in .txt umbenannt natürlich :D)

Als Code benutze ich z.B. http://www.c-plusplus.de/forum/110456
Aber bekomme auch Dateien mit Größe "0" raus.
 
Der Code sieht eigentlich richtig aus. Prüf doch mal den Inhalt der geschriebenen Datei mit einem Hex-Editor und vergleiche mit deinem Originalfile. Vergleiche das auch mal mit dem Inhalt der Resource (falls kein Standard-Resource-Typ).
 
Ich schreibe jetzt einfach mal so wie ich es machen würde. Vielleicht hilft dir das weiter, aber im Prinzip dasselbe.

Pew Pew! Ich hoffe ich habe es richtig aus meinem Kopf zusammen bekommen:
C:
bool _util_decompress_bitmap(char *theResourceName) {
	HRSRC aResourceH;
	HGLOBAL aResourceHGlobal
	unsigned char *aFilePtr;
	unsigned long aFilSize
	HANDLE file_handle;

	aResourceH = FindResource(NULL, theResourceName, "BINARY");
	if(!aResourceH) {
		return false;
	}

	aResourceHGlobal = LoadResource(NULL, aResourceH);
	if(!aResourceHGlobal) {
		return false;
	}

	aFileSize = SizeofResource(NULL, aResourceH);
	aFilePtr = (unsigned char *)LockResource(aResourceHGlobal);
	if(!aFilePtr) {
		return false;
	}

	char _filename[64];
	snprintf(_filename, 62, "%s.bmp", theResourceName);
	file_handle = CreateFile(filename,
							File_ALL_ACCESS,
							0, Null,
							Create_Always,
							0, Null);
	if(INVALID_HANDLE_VALUE == file_handle) {
		int err = GetLastError();
		if((ERROR_ALREADY_EXISTS == err) || (32 == err)) {
			return true;
		}
		printf("%s decompress error %d\n", _filename, err);
		return false;
	}

	while(FileSize--) {
		unsigned long numWritten;
		WriteFIle(file_handle, aFilePtr, 1, &numWritten, Null);
		aFilePtr++;
	}
	CloseHandle(file_handle);
	return true;
}

Gruß Cyb3r
 

Neue Beiträge

Zurück