[C++] Ressourcen extrahieren

Diskutiere [C++] Ressourcen extrahieren im Developer Network Forum im Bereich Hardware & Software Forum; Hi. Und schon wieder stelle ich ein dumme Frage...:D Ich versuche die eingebundene Datei "7z.exe" zu extrahieren. Leider ohne Erfolg. Meine...
  • [C++] Ressourcen extrahieren Beitrag #1
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Hi.
Und schon wieder stelle ich ein dumme Frage...:D
Ich versuche die eingebundene Datei "7z.exe" zu extrahieren. Leider ohne Erfolg.

Meine "ressource.rc" sieht so aus:
Code:
101 BINARY "7z.exe"
Die Datei wird auch fehlerfrei und problemlos eingebunden.
Hier mein Code, welcher die Ressource eigentlich extrahieren sollte.
Code:
#include <windows.h> 

int WINAPI WinMain(      
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow);

bool ExtractRes(char*,int,char*); 

int WINAPI WinMain(      
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{ 
    bool success = ExtractRes("BINARY", 101, "7z(3).exe"); 
    if (success == false)
		MessageBox(NULL, "Error detected, process exits!", "Error", NULL);
	return 0; 
} 

bool ExtractRes(char* type, int ResID, char* file) 
{ 
	HINSTANCE hCurrentFile = GetModuleHandle(NULL);

    HRSRC hRessource = FindResource(NULL,//hCurrentFile,
		(LPCSTR)&ResID,
		type); 

    if(hRessource != NULL) 
	{
       MessageBox(NULL, "Error", "2", NULL);
	   return false;
	}
	
	HGLOBAL hSrcFileLoad  = LoadResource(
		NULL,//hCurrentFile,
		hRessource); 

	void* pvSrcFileData = LockResource(hSrcFileLoad); 
	size_t stSrcFileSize = SizeofResource(
		hCurrentFile,
		hRessource);

	HANDLE hCreatFile    = CreateFile(
		file,
		GENERIC_ALL,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL,
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	 
	if(hCreatFile == INVALID_HANDLE_VALUE) 
	{
       MessageBox(NULL, "INVALID_HANDLE_VALUE", "", NULL); 
	   CloseHandle(hCreatFile);
	   return false;
	}

[B][I]	bool writefile = WriteFile(
		hCreatFile,
		pvSrcFileData,
		stSrcFileSize,
		NULL,
		NULL);[/I][/B]

	if(writefile==false)
	{
		MessageBox(NULL, (LPCSTR)GetLastError(), "", NULL); 
		CloseHandle(hCreatFile);
		return false;
	}

	CloseHandle(hCreatFile); 
	return true; 
}

Wenn ich sie jetzt aber exportieren will, bekomme ich immer bei WriteFile einen Error:


Herzlichen Dank für eure Bemühungen!
 
  • [C++] Ressourcen extrahieren Beitrag #2
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Die Erklärung für den Absturz findest Du in Deinem Screenshot ;-)

Der Zeiger pvSrcFileData NULL. Die Anzahl der zu schreibenden Bytes stSrcFileSize ist ebenfalls 0. Irgendwas geht also schon beim Laden der Ressource schief.
 
  • [C++] Ressourcen extrahieren Beitrag #3
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Ich habe schon gestern Abend mit dem Debugger jede einzelne Variable überprüft.
Gerade habe ich aber festgestellt, das schon GetModuleHandle(NULL) bzw. GetModuleHandle(CurrentFile) den Wert "unused 9460301" zurückgibt.


[Edit]
Jetzt mach ich mich mal drann, die Datei mit LoadLibary() laden zu lassen.

[Edit]
Gleicher Fehler.:(
 
  • [C++] Ressourcen extrahieren Beitrag #4
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Soo, gerade habe ich es geschafft.
In diesem Forum beschäftigt man sich mit dem gleichen Problem, wobei besonders der Post #11 äußerst hilfreich war.

Die Variablen sind zwar immer noch "unused", aber irgendwie funktioniert es nun.

Ein herzliches Dankeschön an UnimatrixZero und natürlich an Endurion, dank dem ich es nun zum laufen gebracht habe.:goil:
 
Thema:

[C++] Ressourcen extrahieren

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben