Ouvrir un Exécutable Avec C++

Fermé
DolphinEye Messages postés 23 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 2 novembre 2006 - 7 janv. 2004 à 20:29
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 - 15 sept. 2010 à 21:56
Bonsoir à tous, je voulais savoir comment ouvrir un fichier avec C++ 6.0
Je voudrai pouvoir faire un "launcher de jeu" pour lancer Half-Life par exemple
Merci d'avance

--Dolphin's Eye
A voir également:

9 réponses

tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
7 janv. 2004 à 20:39
cherches ds me fourm, on a deja repondu comment executer un programme sous windows.

Le principe c'est : creer un processus (par un appel a un equivalent a fork ) et puis executer le programme (par un equivalent de exec). Je pense q si je ne me trompe pas, il ya un appel systeme qui s'appelle CreateProcess et qui se charge de fair les 2 en meme temps.
Va voir ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp
et pour un exemple :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_processes.asp
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
1
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
18 août 2010 à 19:59
Je ne sais pas ce qui existe sous windows, mais sous linux j'utilise popen et de temps en temps execve, execlp...

De toute façon il reste possible de faire deux sections de codes spécifiques à linux et windows (avec des #ifdef .... #else ... #endif).

Autre possibilité, on utilise un framework genre Qt qui existe sous Linux et Windows et on suit cet exemple :
http://www.qtforum.org/article/3079/howto-start-an-external-program-from-a-qt-application.html

En plus si on a l'intention de faire un interface graphique, utiliser Qt est un choix qui a le mérite d'être portable et aujourd'hui fréquemment utilisé (cf googleearth, kde, skype ... autant d'exemples écrits en Qt).

Bonne chance
1
DolphinEye Messages postés 23 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 2 novembre 2006
7 janv. 2004 à 20:56
Désolé d'avoir reposté un sujet auquel vous aviez répondu, mais la recherche m'envoyait sur google :-(
Sinon merci pour ton aide

--Dolphin's Eye
0
Bah oui, mais votre solution elle est pas top la.
C'est bien si tu veux faire du Windows.
Mais moi j'ai le même besoin... sous Linux.

L'ideal pour moi serait un commande identique pour un programme Windows comme pour Linux
J'imagine qu'il y a une regle POSIX sur le sujet, non?

Est-ce que vous la connaissaite
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
5 déc. 2005 à 15:59
Eh ben, le principe qe je lui ai donné est celui proposé par posix => tu crée un processus par fork puis tu exécutes ton code en appelant une des fcts de la famille exec (c'est coe ça qe ça se fait avec shell, bash par exemple).
0

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

Posez votre question
MissZaza Messages postés 149 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 7 décembre 2005 33
2 déc. 2005 à 22:07
Bonsoir,

Si c'est juste pour lancer un fichier exécutable, pourquoi ne pas utiliser :
//exemple pour lancer la calculette windows
std::system("C:\\Windows\\System32\\calc.exe");
0
La encore ca ne va pas.
Potentiellement 2 problemes:
1. Faut faire gaffe aux STL: selon la version du compilo, le comportement change et tu peux te retrouver avec des comportements differents entre Linux et Windows

2. La plus importante: system lance en effet un executable sur toutes les plateformes. Mais tu perds le pid de l'executable en question ce qui fait qu'ensuite tu ne peux plus le controler.

Ce que je pense qu'il faudrai faire, c'est sa propre classe qui expose une interface commune aux 2 plateformes, mais qui appelle des portions de codes differentes (ca corrige le pb2 mais pas forcement le 1 malheureusement, si vous ne faites pas gaffe a ce que vous faites dans votre librairie).
Par exemple la classe pourrait avoir une methode appelle "runProcess" qui retourne un type propre a la classe (e.g. Classe_Pid).
Mais il y aurait un fichier cpp pour Windows et un autre pour Linux
Sous Windows on fait appelle a des CreateProcess (je crois que c'est comme cela que ca s'appelle), et sous Unix on appelle un fork qui doit appeller execve. Le fork retournera le pid du process cree.

Ensuite, pour la compilation, tu met un flag pour dire si tu veux une compile Linux ou Windows, et en fonction de ton flag, tu indiques dans ton makefile quels sont les fichiers sources a prendre.

Je n'est pas codé cette solution mais je pense que c'est la bonne.
Si tu vois une idee plus simple, je suis preneur.
Merci.
0
Dites-moi tout le monde, ca fait 6 ans, mais on attend toujours une solution !

System() n'est pas recommandé, surtout pour différents OS, CreateProcess() et ShellExecute(), impossible de trouver un exemple valide, même sur Google, et on est pas en VC++, mais en C++.

Une idée ou un exemple ? N'hésitez pas à nous donner un code !
Merci !
0
On attend toujours. Ca n'existe vraiment pas ?
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
15 sept. 2010 à 16:00
Les solutions de Zorel sont bonnes. J'ai testé avec succes les exec et les spawn sous windows.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
18 août 2010 à 20:45
Bonjour,

Le mieux est de se créer une fonction soi-même.
Cette fonction sera définie dans un fichier à part qui appellera les fonctions CreateProcess pour windows (#ifdef comme proposé par mamiemando), ou fork/exec* sous linux.

Cdlt,
0
Bonjour,

Une autre solution comme dit plus haut serai de faire une interface avec un lib multi archi

Comme sa 2 classe une windows et une linux avec un classe mére abstraite qui serai appelé dans tous le programme et voila le reste devient invisible :)
Vive les virtuel pure ^^
0
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
15 sept. 2010 à 21:56
Pas besoin de méthodes virtuelles, juste de #define. Les virtuelles (pures ou non) ne seraient au final d'aucun secours, la seule chose importe est d'avoir un header commun aux différentes plateforme et des sources (.cpp) adaptés à chaque plate-forme (quitte à utiliser des #define).

Typiquement, Qt est une librairie multi-plateforme et n'utilise pas spécialement de virtuelles pures.
0