Inclusion de resources en C/C++ [Résolu]

Signaler
Messages postés
10
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
17 juillet 2008
-
Messages postés
10
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
17 juillet 2008
-
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

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Pour charger ton exécutable depuis les ressources:
FindResource()/LoadResource()/LockResource()
puis
CreateDirectory()/CreateFile()/WriteFile()
Messages postés
10
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
17 juillet 2008

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.
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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.//@++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
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++ (@++)<!--
Messages postés
10
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
17 juillet 2008

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.