baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010
-
5 juil. 2010 à 15:58
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010
-
8 juil. 2010 à 09:15
Bonjour à tous,
Voilà, afin de faciliter l'utilisation d'une application j'ai décidé de stocker les images et dll en ressource dans mon application afin de pouvoir les extraire automatiquement à chaque démarage. C'est ainsi que après pas mal de recherche j'ai arrangé une fonction permettant cela copier un fichier sur le disque à partir d'un fichier stocké en ressource):
char * extrairefichier(HINSTANCE hInst, char nom[MAX_PATH], int numerofichier)
{
char szPath[MAX_PATH],
szFile[MAX_PATH],
*pData;
GetCurrentDirectory( MAX_PATH, szPath );
//lstrcat( szPath, "\" );
// get resources pointer in the memory
HRSRC hInfo = FindResource ( hInst, MAKEINTRESOURCE(102), "FICHIER" );
HGLOBAL hRes = LoadResource ( hInst, hInfo );
DWORD dwSize = SizeofResource( hInst, hInfo ),
dwBW;
// this is our file
pData = ( char* )LockResource( hRes );
// give it a name
wsprintf( szFile, "%s%s", szPath, nom); //nom.cab what ever
// create a file
HANDLE hFile = CreateFile( szFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL );
// copy our file in memory to our just created file
WriteFile( hFile, ( LPVOID )pData, dwSize, &dwBW, NULL );
// close the file
CloseHandle( hFile );
return szFile;
}
Le problème est que cette fonction me crée bien les fichiers voulus mais ils sont tous vides (0 octets).
D'où vient le problème ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 6 juil. 2010 à 12:11
La cause du problème se trouverait en dehors du bout de code soumis plus haut. Pour avoir un petit exemple regarde mon dernier code source. Dans le code de l'injecteur on extrait une dll depuis les ressources pour la mettre à coté de l'exécutable. Mon fichier .rc est écrit manuellement dont les identificateurs sont des chaines. Je n'utilise pas de fichier resource.h.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 6 juil. 2010 à 02:14
Salut,
Je pense qu'il n'aura pas besoin de SetEndOfFile() car WriteFile() suffit ici.
Lance ton code en mode débogage pour t'assurer que les valeurs de retour des fonctions sont valides avant d'arriver à WriteFile(). Vérifie la valeur de hInst. Il est à 0 pour l'exécutable en cours. Le fichier .rc est-il inclus au projet? Est-il correctement écrit?
Vous n’avez pas trouvé la réponse que vous recherchez ?
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 8 juil. 2010 à 09:15
Bonjour, dsl de ma réponse tardive.
En effet, vous avez raison le problème était surtout autour de ma fonction (plus généralement dans mon projet). N'ayant pas trouvé l'erreur j'ai recrée un projet et tout a fonctionné :s.