Inclusion de resources en C/C++

Résolu
techno_man Messages postés 10 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 17 juillet 2008 - 1 juil. 2008 à 19:29
techno_man Messages postés 10 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 17 juillet 2008 - 2 juil. 2008 à 14:57
Bonjour,
Je travaille actuellement sur une application qui après quelques vérifications, doit executer ou non une autre.
de telle manière que mes utilisateurs n'aient qu'un fichier à exécuter.
Donc, je voudrais que le deuxième programme soit chargé en ressource et qu'il soit exécuté si les verifications dans le premier programme sont OK.
Pour mettre ce système en place, je pense copier le second programme dans un dossier temporaire qui sera supprimé. Je pense ensuite faire un simple appel système pour exécuter ce programme.
Maintenant, je ne vois pas comment :
1/ charger le fichier ressource dans le premier programme
2/ copier le contenu dans un répertoire temporaire.
Pour info, j'utilise Dev-C++.

Avez vous une idée ?
Merci
Guigui.

5 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
1 juil. 2008 à 21:45
Pour charger ton exécutable depuis les ressources:
FindResource()/LoadResource()/LockResource()
puis
CreateDirectory()/CreateFile()/WriteFile()
3
techno_man Messages postés 10 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 17 juillet 2008
2 juil. 2008 à 14:57
Bon,

je me répond à moi même.
Il fallait déclarer
#define IDR_BIN   160

dans le resource.rc également... je ne l'avais mis que dans mon code CPP.
Pour ceux que ca interesse, voici un lien avec un exemple de code (que j'ai utilisé et qui marche).

http://syedgakbar.wordpress.com/2007/11/07/embedding-dll-and-binary-files-in-the-executable-applications/

Guigui.
3
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
1 juil. 2008 à 20:37
Slt,
     Si tu veux appeler un 2e exe tu peux faire (C) :
system("start C:\\MonDossier\\Monexe.exe");
pour copier :
system("copy C:\\DossierSource\\Fichiersource.exe C:\\DossierDestinataire");/*Il me semble qu'il y à un dossier temporaire dans C:\DOCUM~1\NomDeLutilisateurCourant\LocalS~1\Temp
Pour récupérer le Nom de l'util' courant :
char *Nom=(char*)malloc(256*sizeof(char));
LPDWORD ml=256;
GetUserName (Nom,&ml);*/
Sinon tu peux toujours supprimer ton exe toi-même :
system("DEL C:\\Dossier\\MonExe.exe");
Si tu as le CS du 2e exe, tu pourrais tout simplement faire un if( Verification == OK ){/*Code du 2e exe*/}, il n'y aurait ainsi qu'un exe.
Les system(); ne fonctionneront je pense que sous Win et je ne sais pas si ils fonctionneront sur autre qu'une console.

Cordialement, B@stien.//@++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 juil. 2008 à 21:09
Sous windows:
CreateProcess lancera l'exécutable dans son propre thread. Ton programme principal ne "gèlera" pas.
On peut utiliser WaitForSingleObject pour arrêter le programme principal et attendre la fermeture de l'exécutable lancé.

C++ (@++)<!--
0

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

Posez votre question
techno_man Messages postés 10 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 17 juillet 2008
2 juil. 2008 à 12:18
Bonjour,

merci de vos réponses.
juju12, je susi en train de mettre en place ce que tu as dis.
J'ai actuellement un problème avec FindResource, mais je n'en trouve pas la cause. (Erreur 1814)

HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDR_BIN), "BINARY");
if (hResource == NULL)
{
             MessageBox(NULL, "Impossible de charger la ressource", "", 0);
             EndDialog(hDlg,0);
              return 1;         
}

sachant que dans mon fichier resource.rc j'ai :

IDR_BIN                 BINARY     DISCARDABLE     ".\\NETVIEW.EXE"

et que j'ai bien déclaré :
#define IDR_BIN   160

Merci de votre aide.

Guigui.
0
Rejoignez-nous