Enregister un fichier depuis les ressources

Résolu
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010 - 5 juil. 2010 à 15:58
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Derniè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 ?

5 réponses

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
6 juil. 2010 à 08:30
Bonjour,
J'ai vu ce code dans la librairie de CXImage. Télécharge le projet sur codeproject et compare le à ton code.

louis
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 juil. 2010 à 19:01
Utilise SetEndOfFile() pour déplacer le pointeur de fin de fichier.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Derniè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.

Merci pour vos conseils
0
Rejoignez-nous