|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
[c++] inserire immagini in file exe
sto realizzando un programma in c++, dovrei inserire un'imaggine in un file exe e appena si clicca sul file exe l'immagine deve venire estratta nella cartella corrente.
ho creato il file risorsa con questa sintassi: img BITMAP "1.bmp" ma non so come procedere. mi sapete aiutare |
|
|
|
|
|
#2 | |
|
Registered User
Iscritto dal: Jul 2007
Messaggi: 915
|
Quote:
Non credo sia possibile fare una cosa del genere... |
|
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
FindResource LoadResource LockResource poi per scrivere tutta la roba nel file usa delle comunissime CreateFile/WriteFile oppure fopen/fwrite. per chiudere il file naturalmente CloseHandle oppure fclose. |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#5 |
|
Registered User
Iscritto dal: Jul 2007
Messaggi: 915
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
Quote:
ma ho un problema con la funzione HRSRC FindResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType); il file h lho chiamato img.h, l'immagine da caricare lho chiamata foto. ho provato a definire la funzione cosi' HRSRC FindResource(img,foto,RT_BITMAP); ma nn va. scusate ho iniziato da poco con il c++.. |
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
FindResource al primo parametro nel tuo caso vuole NULL perché devi prendere la risorsa dal tuo file eseguibile; al secondo invece devi passare l'identificatore numerico della risorsa scritto come stringa e preceduto da un #, per esempio "#258". infine al terzo parametro devi passare RT_BITMAP.
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Questa funzione che ho fatto serve per salvare una risorsa su un file:
Codice:
BOOL SaveResourceToFile (HMODULE hModule, LPCSTR lpName, LPCSTR lpType, LPCSTR lpszFilename)
{
HRSRC hRsrc;
HGLOBAL hGlobal;
DWORD dwSize, dwWritten;
LPVOID lpData;
HANDLE hFile;
BOOL bRet;
if ((hRsrc = FindResource (hModule, lpName, lpType)) == NULL)
return FALSE;
if ((dwSize = SizeofResource (hModule, hRsrc)) == 0)
return FALSE;
if ((hGlobal = LoadResource (hModule, hRsrc)) == NULL)
return FALSE;
if ((lpData = LockResource (hGlobal)) == NULL)
{
FreeResource (hGlobal);
return FALSE;
}
if ((hFile = CreateFile (lpszFilename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
{
FreeResource (hGlobal);
return FALSE;
}
bRet = WriteFile (hFile, lpData, dwSize, &dwWritten, NULL) && dwWritten == dwSize;
CloseHandle (hFile);
FreeResource (hGlobal);
return bRet;
}
nameID BITMAP filename nel file eseguibile in realtà non ci sarà l'header iniziale di 14 bytes della immagine. Per questo motivo, se l'obiettivo è solamente quello di estrarre una risorsa per salvarla su file, la cosa migliore da fare è quella di assegnargli un tipo di risorsa custom, es MYBMP o qualunque altra cosa. Naturalmente l'header iniziale si potrebbe anche rigenerare facilmente (sono pochi dati) e quindi scriverlo all'inizio del file prima di scrivere la risorsa. Ma la funzione che ho postato sarebbe da rivedere, in quanto adesso è "generica".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
ok grazie a tutti
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:32.




















