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

MFC Discussion :

Comment approcher mon problème de lancement d'executable


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut Comment approcher mon problème de lancement d'executable
    Bonjour à tous,
    voila mon problème : J'ai réaliser une appliquation en mode console, dans laquelle je peux taper des commandes a partir de l'entrée clavier (std::cin), et qui m'affiche les resultats sur sa sortie standard : l'écran (std::cout).

    Ce dont j'aurai besoin maintenant, c'est de pouvoir , à partir d'un appli avecMFC, lancer cet executable et pouvoir lui envoyer sur son entrée dans commandes tapées depuis un composant, et que les valeurs renvoyées sur sa sortie standard soient recuperées pour etre affichées d'un un autre composant.

    En gros j'aimerai rediriger ses entrées standard sur des entrées/sorties personalisées.

    J'ai fais un tour ici : http://c.developpez.com/faq/vc/?page...ead#ProcessNew car je voulais passer par la création d'un processus fils de mon application pour faire cela.
    APres rapide lecture, je me demande si cela est la meilleure solution, et comment il serai le plus logique et propre , de régler mon probleme

    Donc j'attend vos conseils , remarques, critiques , liens, enfin toute information pouvant m'etre utile

    Bonne journée ++

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Je rajoute juste que je connais un peu la programmation systeme sous Unix (fork, pipe, semaphore etc...), donc si une solution de ce genre est possible sous windows, je suis preneur

    Merci
    ++

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    On en a deja parlé ici. Faut créer le process avec CreateProcess et rediriger son entree standard.
    http://support.microsoft.com/default.aspx?scid=kb;en-us;190351

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    désolé si cela à déja abordé. J'ai cherché en vain avant de poster...

    Merci pour ton lien , cela semble etre ce dont j'ai besoin. Par contre pourrai tu me donner quelques expliquations suplémentaires? C'est la toute première fois que j'aborde cette librairie

    A quoi sert : DuplicateHandle ?

    Que signifie : struct.bInheritHandle = TRUE;

    Petit à petit je fignolerai mes recherches et mon apprentissage, mais il me faut un petit coup de pouce pour commencer
    Merci d'avance
    ++

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Faut lire la doc (CreateProcess, DuplicateHandle, ...) c'est expliqué.
    Le principe, c'est de créer des pipes et les donner comme flux d'E/S à la place du clavier / console. Comme ça l'application père peut communiquer / piloter le fils via les pipes.
    Mais dans la pratique c'est un peut plus complexe car un process a ses propres variables privées, et y'a la possibilité d'hériter des handle du père. Mais ça pose des problèmes si le père et le fils sont tous les 2 propriétaires du même pipe, car on peut pas détecter sa fin d'utilisation par le fils. Alors y'a une pirouette complexe ou tu dupliques les handle pour le donner au fils puis tu fermes ton handle comme ça le seul qui reste c'est celui donné au fil (dupliqué avant), ainsi quand le fils se termine on peut détecter la fin d'utilisation du pipe
    Bref c'est un peu complexe. Mais retient que ce code est le code correct pour faire ça.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Merci Aurelien, tu viens de donner reponse a mes questions
    Je connaissais le principe mais pas les détails.
    Merci de ton aide
    ++

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Bonjour,
    En fait je reviens avec un probleme similaire car j'ai essayé d'adapter le contenu du lien donné ci dessus à mon appli MFC en en faisantune classe. Je me retrouve avec une erreur étrange que je n'arrive pas à resoudre seul...
    J'ai donc mis un fichier zip online avec le projet, si quelqu'un pouvait regarder et me dire d'ou viennent ces erreurs (j'ai regarder l'aide de visual mais je suis pas sur de comprendre ce que ca veut dire)

    Voici le lien : http://pagesperso.laposte.net/kiroukou/files/test.zip

    Voici qd meme les erreurs :



    Linking...
    testmfcDlg.obj : error LNK2005: "public: static unsigned long __stdcall ProcessManager::StaticThreadFunc(void *)" (?StaticThreadFunc@ProcessManager@@SGKPAX@Z) already defined in testmfc.obj
    testmfcDlg.obj : error LNK2005: "public: __thiscall ProcessManager:rocessManager(void)" (??0ProcessManager@@QAE@XZ) already defined in testmfc.obj
    testmfcDlg.obj : error LNK2005: "public: void __thiscall ProcessManager::main(void)" (?main@ProcessManager@@QAEXXZ) already defined in testmfc.obj
    testmfcDlg.obj : error LNK2005: "public: void __thiscall ProcessManager:repAndLaunchRedirectedChild(void *,void *,void *)" (?PrepAndLaunchRedirectedChild@ProcessManager@@QAEXPAX00@Z) already defined in testmfc.obj
    testmfcDlg.obj : error LNK2005: "public: void __thiscall ProcessManager::ReadAndHandleOutput(void *)" (?ReadAndHandleOutput@ProcessManager@@QAEXPAX@Z) already defined in testmfc.obj
    testmfcDlg.obj : error LNK2005: "public: unsigned long __stdcall ProcessManager::GetAndSendInputThread(void *)" (?GetAndSendInputThread@ProcessManager@@QAGKPAX@Z) already defined in testmfc.obj
    testmfcDlg.obj : error LNK2005: "public: void __thiscall ProcessManager:isplayError(char *)" (?DisplayError@ProcessManager@@QAEXPAD@Z) already defined in testmfc.obj
    Debug/testmfc.exe : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe.
    En gros il y a un probleme avec toutes les méthodes de ma classe. Je ne comprend pas


    Merci de votre aide
    ++

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Dans ProcessManager.h, après le #endif, enlève tout et déplace tout dans un nouveau fichier ProcessManager.cpp
    http://c.developpez.com/faq/cpp/?pag...ASS_header_cpp

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Merci Aurelien mais j'avais deja essayé, et cela ne marchai pas
    Je vais tout de même reéssayer encore une fois, mais cela ne fonctionne pas j'en suis quasi sur..

    Merci

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    C'est pour tant la bonne manière de faire. Lit bien la FAQ...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Bon en fait je me rectifie un peu, car je n'étais pas clair. En fait la séparation .h .cpp marche en elle même , mais ce que je voulais dire, est que cela reporte l'erreur ailleurs.
    Voila l'erreur que j'obtiens et les 2 fichiers :
    Compiling...
    ProcessManager.cpp
    p:\program files\microsoft visual studio\testmfc\processmanager.cpp(266) : fatal error C1010: unexpected end of file while looking for precompiled header directive
    Error executing cl.exe.

    testmfc.exe - 1 error(s), 0 warning(s)
    Merci encore

    Code supprimé par Aurélien

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    je crois avoir trouvé une réponse ici : http://www-timc.imag.fr/Antoine.Leroy/tutoriaux/VisualCPP/VisualCPP.html
    Je vais tester ça tout de suite

    ++

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Oups décidement je suis pas reveillé aujourd'hui. Dslé de faire le boulet

    Maintenant que tout compile bien ce qui m'étonne c'est (avec le code donné au dessus -- en fait il à été supprimé) que maintenant plus rien ne s'affiche. Pas même la fenetre de dialogue normale.

    En fait l'exemple donné ci dessus sur le site de microsoft se sert d'un thread. Seulement dans la FAQ je lis les termes : thread de service, thread de travail. Je m'y perd un peu. A quoi cela correspond? Pour include l'exemple du site de Microsoft dans mon appli (avec mfc) comment dois je m'y prendre?

    Merci encore
    ++

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    Bonjour,
    plus le sjours passent , plus je me sens faible face à ce problème
    En fait j'aimerai pouvoir lancer en fond un executable dans un process dont j'aurai redirigé les flux d'entrée et sortie pour deux composants CEdit (un pour l'entrée, l'autre pour la sortie)

    J'ai reussi à faire l'exemple donné sur le site de Microsoft, mais intégrer ça dans un petit projet mfc, je n'y arrive pas...

    Donc si des personnes ayant un peu de temps peuvent regarder le zip ici joins, ce serai sympas Il faut changer le chemin vers l'exécutable à lancer pour mettre celui que vous voudriez.

    le fichier : http://pagesperso.laposte.net/kiroukou/files/testmfc.zip

    Ne vous étonnez pas si vous voyez des choses etranges dans le code, j'essaie un peu tout depuis 4 jours, donc à force je pense que cela se mélange dans ma tête.

    Je vous remercie d'avance de m'aider,
    Bonne journée
    Kiroukou

  16. #16
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Aide toi de ça:
    http://www.codeproject.com/threads/redir.asp

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 115
    Points : 42
    Points
    42
    Par défaut
    MErci énormément pour ton aide
    Ce lien (que j'avais tant cherché sur google) est exactement ce que je voulais.

    Merci à toi et à la personne partageant cette ressource.

    Longue vie a ce forum 8)
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment creer mon premier executable
    Par fk04 dans le forum Débuter
    Réponses: 9
    Dernier message: 01/03/2010, 14h56
  2. Problème au lancement de mon programme
    Par shark1308 dans le forum Général Java
    Réponses: 2
    Dernier message: 30/01/2010, 11h39
  3. problème lors de l'execution de mon web service
    Par perrotta dans le forum Visual Studio
    Réponses: 1
    Dernier message: 02/12/2009, 17h59
  4. Réponses: 3
    Dernier message: 09/09/2008, 01h20
  5. comment fair mon fichier executable!
    Par moon5 dans le forum JDeveloper
    Réponses: 1
    Dernier message: 05/09/2007, 18h51

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