Ressource (presque résolu)[résolu]

Ressource (presque résolu)[résolu] - C - Programmation

Marsh Posté le 22-02-2005 à 23:06:08    

(re)
 
Peut-etre cette longue serie de post sur les ressources va-t-elle enfin trouver un denouement heureux ...
 
J'ai finalement trouvé une fonction, SizeofResource(), qui m'a permis de copier mon .EXE en ressource sur le disque.
J'avais le pointeur grace a LockResource(), il me manquait quelque chose pour determiner la fin du fichier.
Tout heureux de cette decouverte j'ai vite extrait l'EXE et tenté de l'executer.
 
L'extraction se passe apparemment bien, mais selon la loi de l'emmeredement maximum (si tout semble aller bien c'est que vous avez oublié quelque chose) impossible ensuite de faire fonctionner l'EXE.
 
J'obtien un message de ce style:

Citation :

Sous Systeme MS-DOS 16 bits
D:/WINDOWS/SYSTEM32/AUTOEXEC.NT.Le systeme de fichier ne convient pas a l'execution des applications MS-DOS ou Microsoft Windows.Choisissez fermer pour mettre fin a l'application.


 
Voila le code qui extrait la ressource:

Code :
  1. int i;
  2. HRSRC res1 = FindResource(NULL,"mailer.exe","EXE" );
  3. if(res1)
  4. {
  5.    DWORD taille = SizeofResource(NULL, res1);
  6.    HGLOBAL lres1 = LoadResource(NULL,res1);
  7.    LPVOID fres1 = LockResource(lres1);
  8.    FILE* fd = fopen("mailerclone.exe", "a+" );
  9.  
  10.    for(i=0; i<taille; i++)
  11.    { 
  12.       fputc(fres1, fd);
  13.       fres1++;
  14.    }
  15.    fclose(fd);
  16. }


 
Ne me dites pas que je suis un gros boulet qui fait chi_--_
Repondez moi ... pleazzzzzzzzzzzzzzzzzz


Message édité par maerlin666 le 23-02-2005 à 00:33:41
Reply

Marsh Posté le 22-02-2005 à 23:06:08   

Reply

Marsh Posté le 22-02-2005 à 23:24:21    

Tu veux faire quoi ?
Copier un fichier ?
 
Y a quand même plus simple.
 
Enfin t'as essayé déjà d'écrire au début du fichier (w) et en binaire (b)
 
Et aussi fres1 est un pointeur et pas un caractère donc c'est mal parti ...


Message édité par Tarabiscote le 22-02-2005 à 23:27:21
Reply

Marsh Posté le 22-02-2005 à 23:28:37    

Je veux extraire un fichier un mis en ressource du programme pour le copier sur le fichier.
 

Citation :

Enfin t'as essayé déjà d'écrire au début du fichier (w) et en binaire (b)


 
???


Message édité par maerlin666 le 22-02-2005 à 23:29:42
Reply

Marsh Posté le 22-02-2005 à 23:31:15    

Ben ici :
fopen("mailerclone.exe", "a+" );
 
Ca serait pas mieux ça :
fopen("mailerclone.exe", "wb" );

Reply

Marsh Posté le 22-02-2005 à 23:32:30    

wow ca pourrait bien etre ca ...
merci Tarabiscote

Reply

Marsh Posté le 22-02-2005 à 23:34:02    

Mais y a aussi le fait que tu copies le pointeur dans le fichier.

Reply

Marsh Posté le 22-02-2005 à 23:37:19    

non ca n'a pas marché
J'obtiens toujours le meme message

Reply

Marsh Posté le 22-02-2005 à 23:38:44    

t'as essayé de mettre :
fputc(*fres1, fd);
 
Après je sais pas pour le reste car j'ai pas trop l'habitude des fonctions de microsoft ...

Reply

Marsh Posté le 22-02-2005 à 23:45:15    

ah je copie une addresse au lieu d'une donnée.
effectivement ca peut etre embetant
Comment faire, j'ai essayé *fres1 mais ca mlarche pas  
(j'ai dis une connerie ?)

Reply

Marsh Posté le 22-02-2005 à 23:46:40    

mince j'ai a chaque fois un message de retard
 
 
ca marche roujours pas la j'ai un probleme de compilation
invalid use of void expression


Message édité par maerlin666 le 22-02-2005 à 23:52:52
Reply

Marsh Posté le 22-02-2005 à 23:46:40   

Reply

Marsh Posté le 22-02-2005 à 23:52:18    

ben après je suis pas un spécialiste de l'API windows donc je sais pas trop, mais pour ton erreur il suffit de mettre :
char *fres1 = (char*)LockResource(lres1);

Reply

Marsh Posté le 22-02-2005 à 23:57:25    

je n'en reviens pas  
 
CA MARCHE
 
Je ne pourrais jamais te remercier assez.
Je butte sur les ressource depuis des lustres, chaque fois je tombe sur un os dans mon code.
encore merci ce soir pour la premiere fois depuis longtemps je vais pouvoir dormir
 
Une derniere chose peut tu m'expliquer le pourquoi de cette erreur
que je me couche moins bete ce soir  
je ne voudrais pas abuser de ta generosité
merci encore

Reply

Marsh Posté le 23-02-2005 à 00:00:40    

Pour le char *fres1 = (char*)LockResource(lres1); ?
 
Ben en fait autrement il ne sait pas si *fres1 correspond à 1, 2 ,4, ... octets.

Reply

Marsh Posté le 23-02-2005 à 00:08:25    

ok merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed