auf ressourcen zur laufzeit zugreifen
-
Hallo leute!
Ich habe folgendes Problem...Ich habe zwei exe dateien in mein ressourcescript importiert, sie heisen da jetzt IDR_EXE1 und IDR_EXE2. Jetzt möchte ich diese beiden ressourcen zur laufzeit aus dem programm herauskopieren sagen wir mal nach c:\.
Frage ist nur, wie greife ich auf die ressourcen zur laufzeit zu und wie kopiere ich sie dann an einen bestimmten ort?
mfg
Andreas Ries
-
Hmm ... FindResource LockResource usw. ist aber WinAPI kram ...
-
also ich bin jetzts chonmal so weit
void *pData;
unsigned uSize;
HRSRC hResSrc;
HGLOBAL hResHg;hResSrc=FindResource(NULL,"IDR_EXE1","EXE");
if(!hResSrc)return false;hResHg = LoadResource (NULL,hResSrc);
uSize = SizeofResource(NULL,hResSrc);
pData = LockResource (hResHg);wie bekomme ich jetzt die datei zb nach c:\?
mfg
danke
-
das kommt ganz drauf an um welche Ressource es sich handelt .... ich schätz mal wenn es sich um ein SCRIPT handelt, dass du die Resource als String erstellst oder?
Wenn du jedenfalls LoadRessource oder so verwendest kannst du folgende Ressourcen landen:
Accelerator table
Bitmap
Cursors
Dialog Boxes
Metafiles
Fonts and Text
Icons
Menus
Message-table entry
String-table entry
Version information
-
ja ist ein ResourceSkript...is das jetzt ein Problem?
der typ sit "exe" habe ich selber erstellt...klicke ich die resource im resourceeditor an sehe ich halt den hexcode...
wird meine exe also mit loadresource nicht richtig geladen oda wie?was schlägst du denn vor wie ich eine ausführbare datei in mein projekt importieren kann und es zur laufzeit zb nach c:\ exportieren kann?
mfg
danke!
-
Wenn ich das richtig verstanden hab hast insgesamt 3 Anwendungen .... und in der einen Anwendung möchtest du 2 Weitere hineinkompilieren .... die du dann später wieder extrahieren möchtest
-
genau so hab ich das vor
-
bin jetzt soweit
void *pData;
unsigned uSize;
HRSRC hResSrc;
HGLOBAL hResHg;hResSrc=FindResource(NULL,"IDR_EXE1","EXE");
if(!hResSrc)return false;hResHg = LoadResource (NULL,hResSrc);
uSize = SizeofResource(NULL,hResSrc);
pData = LockResource (hResHg);HANDLE hFile;
hFile = CreateFile("test.txt", GENERIC_WRITE,0,NULL,OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);DWORD bytes;
WriteFile(hFile, pData, uSize, &bytes, NULL);
CloseHandle(hFile);müsste auch alles gehen, ABER FindResource liefer andauernd NULL zurück, das beudet die Funktion findet einfach nicht meine ressource...ich hab aber den namen und den typ genauso angegeben wie es im essource script zu finden ist..
mfg
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Nein! Du hast vermutlich der Ressource eine Id IDR_EXE1 gegeben und keinen Textstring, als Namen.
Verwende mal MAKEINTRESOURCE(IDR_EXE1)!
-
an dem liegts garantiert nicht. vielmehr glaub ich, dass man nicht einfach einen neuen resourcetyp "EXE" erstellen kann ... man kann den typ zwar möglicherweise ohne probleme in die anwendung hineinkompilieren aber nicht mehr herausholen.
da du ja die in deinem fall sowieso nur mit strings arbeitest sollte du dir möglicherweise überlegen den Resourcetyp STRING zu verwenden
-
So Leute, dann will der Papa auch noch mal seinen Tip abgeben. Mach mal bei lpType folgendes rein: RT_RCDATA
Dann wirds funktionieren.
Viele Grüße,
Rainer -denn so schlau ist keiner
-
Rainer1 schrieb:
So Leute, dann will der Papa auch noch mal seinen Tip abgeben. Mach mal bei lpType folgendes rein: RT_RCDATA
Dann wirds funktionieren.
Viele Grüße,
Rainer -denn so schlau ist keinerAbsolut unnötig. Man kann jeden Ressourcen Typ verwenden, wenn man selbst einen Namen definiert.
-
Ja aber so geht es ja. Ich hab' es gerade nochmal getestet und so wie er es hat, geht es eben nicht@ Martin.
Gruß,
Reiner