Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1193 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°990610
maerlin666
Posté le 22-02-2005 à 23:06:08  profilanswer
 

(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
mood
Publicité
Posté le 22-02-2005 à 23:06:08  profilanswer
 

n°990632
Tarabiscot​e
Posté le 22-02-2005 à 23:24:21  profilanswer
 

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
n°990636
maerlin666
Posté le 22-02-2005 à 23:28:37  profilanswer
 

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
n°990645
Tarabiscot​e
Posté le 22-02-2005 à 23:31:15  profilanswer
 

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

n°990650
maerlin666
Posté le 22-02-2005 à 23:32:30  profilanswer
 

wow ca pourrait bien etre ca ...
merci Tarabiscote

n°990653
Tarabiscot​e
Posté le 22-02-2005 à 23:34:02  profilanswer
 

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

n°990657
maerlin666
Posté le 22-02-2005 à 23:37:19  profilanswer
 

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

n°990661
Tarabiscot​e
Posté le 22-02-2005 à 23:38:44  profilanswer
 

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 ...

n°990665
maerlin666
Posté le 22-02-2005 à 23:45:15  profilanswer
 

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 ?)

n°990666
maerlin666
Posté le 22-02-2005 à 23:46:40  profilanswer
 

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
mood
Publicité
Posté le 22-02-2005 à 23:46:40  profilanswer
 

n°990667
Tarabiscot​e
Posté le 22-02-2005 à 23:52:18  profilanswer
 

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);

n°990673
maerlin666
Posté le 22-02-2005 à 23:57:25  profilanswer
 

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

n°990677
Tarabiscot​e
Posté le 23-02-2005 à 00:00:40  profilanswer
 

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

n°990684
maerlin666
Posté le 23-02-2005 à 00:08:25  profilanswer
 

ok merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
cin desynchro! [resolu][resolu] [SWT et MVC] modifier une pripriété d'un GUI de l'extérieur ?
[Résolu][Perl/Gtk2] Récupérer les éléments d'un Gtk2::TreeViewgarder la valeur d'une variable[résolu]
[C] Communication processus sous windows[Resolu]Jai perdu ma source + prob ouvrir nouvelle fenetre [Resolu]
[Java] Dessin dans un buffer affiché par paint => problème RESOLU[Résolu !] liste déroulante dépendante (valeur non gardée)
[C#/VB.NET] [Résolu] Equivalent de GetObject ?[resolu]Texte inséré automatiquement dans formulaire
Plus de sujets relatifs à : Ressource (presque résolu)[résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR