IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

la fonction system


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 30
    Points
    30
    Par défaut la fonction system
    salut,
    j'ai un programme en visual c++ qui est destiné d'afficher le squelette d'une image. maintenant, je souhaite faire une interface graphique qui contient un bouton qui doit me permettre d'afficher le squelette réalisé par le programme dont j'ai parlé. mon problème est que j'ai pas pu faire appel à ce programme. j'ai essayer d'utiliser la fonction system mais ca marche pas, il s'affiche juste une fenetre MS-DOS et disparait sans meme me permettre de voir le message d'erreur.
    le code du bouton est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CBit4Dlg::OnButton1() 
    {
    system(".\squelettisation.exe initPoints.ini -verbose 1 -txt squelette.txt -gui mixed result.txt");
     
    }
    svp si quelqu'un peut me dire ou est le problème et est ce que la fonction system est juste ou non.
    NB: le fichier squelettisation.exe se trouve dans le dossier debug du workspace.
    merci bien

  2. #2
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Attention le caractère \ est spécial en C++, il permet de spécifier les caractères non imprimable (comme \n \r \t etc)
    Pour mettre le "vrai" caractère \ dans une chaine il faut écrire \\
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system(".\\squelettisation.exe initPoints.ini -verbose 1 -txt squelette.txt -gui mixed result.txt");

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 30
    Points
    30
    Par défaut re:la fonction system
    salut,
    merci ca marche, mais le problème est que toujours il m'affiche que le fichier .exe n'existe pas alors qu'il est sous debug.

  4. #4
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    peut-être un problème de chemin.
    essaye "Debug\\squelettisation.exe ..."

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il faut que le fichier se trouve dans le dossier à partir duquel ton exécutable est lancé si tu veux partir sur .\\truc.exe

    Sauf erreur, le dossier à partir duquel est lancé l'exécutable n'est pas Debug ou Release (selon le type de compilation choisi) mais... le dossier racine du projet

    En outre, la fonction system s'avère souvent ne pas être particulièrement adaptée pour une série de raisons...

    Toujours sauf erreur, il est préférable d'utiliser la fonction CreateProcess
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 30
    Points
    30
    Par défaut re:la fonction system
    salut,
    j'ai pas compris la fonction create process, pouvez vous me donner un exemple.
    merci

  7. #7
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Salut,
    Citation Envoyé par koala01 Voir le message
    En outre, la fonction system s'avère souvent ne pas être particulièrement adaptée pour une série de raisons...
    Pourrais-tu préciser lesquelles ? Pour moi l'avantage de system() est d'être plus ou moins standard. Je dis "plus ou moins" car je ne sais pas si cette fonction fait partie officiellement de la librairie standard C, mais en tous cas on la trouve sur linux et windows.

    Citation Envoyé par koala01 Voir le message
    Toujours sauf erreur, il est préférable d'utiliser la fonction CreateProcess
    CreateProcess() est une fonction de l'API win32 qui permet de créer un processus en chargeant un fichier exécutable mais n'attend pas la fin de ce processus, il faut pour cela utiliser WaitForSingleObject() pour attendre la fin et GetExitCodeProcess() pour en récupérer la valeur retournée par ce processus, la fonction system() fait tout ça.

Discussions similaires

  1. fonction system et probleme d'arobase
    Par yerome dans le forum Langage
    Réponses: 3
    Dernier message: 08/07/2005, 16h53
  2. Réponses: 10
    Dernier message: 08/02/2005, 16h04
  3. Réponses: 1
    Dernier message: 20/08/2004, 09h16
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo