Dax89 (Member)
Expert
Messaggi: 283
Iscritto: 07/04/2007
|
Sė gli dai dei nomi in modo tale da essere ritrovate
|
|
()
Newbie
Messaggi:
Iscritto:
|
ok quello capito, ma poi per copiarle come faccio ?
|
|
Dax89 (Member)
Expert
Messaggi: 283
Iscritto: 07/04/2007
|
Non ho capito dove le vuoi copiare:
1) Eseguibile -> Disco
Il sorgente lo scritto un po' pių su, rieccolo
Codice sorgente - presumibilmente Plain Text |
//Cerco la risorsa nell'eseguibile
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(ID_RISORSA), RT_RCDATA);
//Carico la risorsa
HGLOBAL hLoadRsrc = LoadResource(NULL, hRsrc);
//Ricavo il puntatore.
void* pRsrcData = LockResource(hLoadRsrc);
//...utilizzo la risorsa....
|
2) Disco -> Eseguibile :
Aggiungi il file dall'rc editor.
|
|
()
Newbie
Messaggi:
Iscritto:
|
si ho gia provato a fare cosi, ho inserito la risorsa e gli ho dato il nome IDB_CAMMELLO e poi ho inserito il tuo codice cosi :
Codice sorgente - presumibilmente Plain Text |
//Cerco la risorsa nell'eseguibile
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDB_CAMMELLO), RT_RCDATA);
//Carico la risorsa
HGLOBAL hLoadRsrc = LoadResource(NULL, hRsrc);
//Ricavo il puntatore.
void* pRsrcData = LockResource(hLoadRsrc);
//...utilizzo la risorsa....
|
ma non me la copia da nessuna parte, cosa devo aggiungere ?
Ultima modifica effettuata da il 03/09/2008 alle 17:48 |
|
Dax89 (Member)
Expert
Messaggi: 283
Iscritto: 07/04/2007
|
Non la copia da nessuna parte, perchč il codice non fa altro che ricavare un puntatore alla risorsa desiderata, si ferma lė
Per salvarla FISICAMENTE, credo che i passi da seguire siano i seguenti (dopo che hai ricavato il puntatore alla risorsa desiderata):
- Ricavi la dimensione con SizeOfResource
- Scrivi su file i dati puntati dal puntatore che hai ricavato in precedenza, il numero dei bytes da scrivere te lo da SizeOfResource
|
|
()
Newbie
Messaggi:
Iscritto:
|
scusa l'ignoranza ma non riesco a ottenere il numero di byte da scrivere, io faccio cosi:
int size = pRsrcData.SizeOfResource();
e una volta ottenuto il numero come faccio a tirarli fuori dal puntatore uno per volta ? cosi ?
int b;
for(numero di byte)
{
b=pRsrcData++;
}
e poi per scriverli uso ofstream ?
|
|
Dax89 (Member)
Expert
Messaggi: 283
Iscritto: 07/04/2007
|
Ehm, stiamo facendo un po' di confusione....
Codice sorgente - presumibilmente C/C++ |
//Cerco la risorsa nell'eseguibile
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDB_CAMMELLO), RT_RCDATA);
//Carico la risorsa
HGLOBAL hLoadRsrc = LoadResource(NULL, hRsrc);
//Ricavo il puntatore.
void* pRsrcData = LockResource(hLoadRsrc);
int resSize = SizeOfResource(GetModuleHandle(NULL), hRsrc);
//Salvo la risorsa
HANDLE hFile = CreateFile("C:\\MiaRisorsa.dat", GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD bytesWritten;
WriteFile(hFile, pRsrcData, resSize, &bytesWritten, NULL);
CloseHandle(hFile);
|
Dovrebbe essere pių o meno una cosa cosė
|
|
()
Newbie
Messaggi:
Iscritto:
|
ho inserito il tuo codice, ma visual studio non me lo compila
mi dice: SizeOfResource identifier not found, e si che ho inserito
#include <winbase.h>
#include <windows.h>
#pragma comment (lib,kernel32.lib)
ho anche provato a inserire kernel32.dll invece e .lib ma non va
|
|