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

Algorithmes et structures de données Discussion :

Echange de paramètres entre deux programmes


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut Echange de paramètres entre deux programmes
    Salut,


    j'ai deux programmes écris dans deux langages différents, je veux à partir de l'un appeler l'exécutable de l'autre en échangeant les paramètres via des fichiers .txt et .bmp.

    Programme1 --Appelle --->Programme2

    Programme1 charge une image et la transmet avec d'autres paramètres au programme2.
    le programme2 traite l'image chargée et crée en sortie une autre image.
    Programme1 a besoin de l'image traitée pour l'afficher.

    j'ai opté pour faire une boucle qui teste à partir du Programme1 l'existence de l'image traitée (crée par le pRogramme2), ça a marché mais il me semble que c'est du bricolage je cherche une solution plus fiable.

    Merci pour votre aide

  2. #2
    Membre actif Avatar de maleaume
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Par défaut
    une premiere idée comme ca :
    si ton programme 2 se ferme une fois le traitment terminé, je ferai en sorte depuis mon programme 1 de lancer le second dans un autre thread, et de checker si le thread est alive en testant toutes les 2 secondes par exemple.

    une fois le thread terminer je peux aller lire mon fichier et afficher

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par SmileSoft Voir le message
    Merci pour votre aide
    ça dépend en quel langage, sous quelle plateforme, avec quelle architecture voulue ?

    Les programmes sur la même machine, ou sur des machines distantes ?

    Sur quel os ?


    par exemple en C il y a la fonction system(), et on lui passe en chaine de caractères les paramètres et le nom du programme :

    prog1

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    status = system ( "prog2 param.txt  ....&");

  4. #4
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    salut,

    merci maleaume et souviron34 pour vos réponses
    Citation Envoyé par souviron34 Voir le message
    ça dépend en quel langage, sous quelle plateforme, avec quelle architecture voulue ?
    Les programmes sur la même machine, ou sur des machines distantes ?
    Sur quel os ?

    os:windows
    programme1:c++ Builder
    programme2:matlab (je crée le .exe du code matlab à partir de matlab.

    j'utilise shellexecute pour faire l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShellExecute(this,"Open","C:\\programme2.exe",NULL,"C:\\dossier",SW_HIDE);
    //SW_HIDE pour dire que le programme2 s'exécute en tache de fond.

  5. #5
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Bin ya assez "simple" je pense (vue que tu es sous windows) en utilisant l'API:

    Tu fais un CreateProcess, puis tu attends la fin de ce processus pour chercher si il y a une image ou non :

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    Donc c'est pas portable, mais on peut faire l'équivalent sous Linux

  6. #6
    Membre éclairé Avatar de Pistolero_JB
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Par défaut
    C'est une idée comme une autre mais en programmation classique les échanges d'information entre logiciels/processus sont assurés par la notion de socket wiki. Chaque logiciel est serveur/client d'une communication sur un socket de la machine. Je pense que le copier/coller du presse papier doit justement utiliser cette méthode. Cette notion de socket est universelle on la retrouve sur Windows, Linux, BSD, etc. Pratiquement tous les langages ont des fonctions pour gérer les sockets...

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    non ceci est impossible dans son cas, puisque le 2ième programme il ne peut pas le modifier (matlab)..

    Par contre, un moyen simple pour un "dialogue" est qu'il doit y avoir un moyen de faire fonctionner matlab via un script / batch / fichier de commande..

    Il suffit alors d'écrire ce fichier de commande, et d'appeller la fonction system() en C...

    Ou si on ne veut pas faire une suite de commandes mais simplement lancer le programme avec des paramètres comme je l'ai déjà dit la fonction system() en C, et je suis certain qu'elle existe avec d'autres langages...

    fonction system()

  8. #8
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Mais non, surtout pas la fonction system !

    Ca c'est bien que pour faire des scripts Shell/Batch !
    Là ce n'est pas le cas, il a 2 éxécutables !

    La méthode que j'ai proposé permet de faire quelque chose de propre, sans boucle infinie pour tester la présence du fichier...
    D'après ce que j'ai compris, ce qui gène c'est pas de lancer le 2ème programme, mais d'arriver à savoir quand celui-ci a terminé ou non...

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cs_ntd Voir le message
    Mais non, surtout pas la fonction system !

    Ca c'est bien que pour faire des scripts Shell/Batch !
    Là ce n'est pas le cas, il a 2 éxécutables !
    Tu ferais bien de réviser tes cours...

    La fonction system() sert dans des PROGRAMMES ....

    Si tu avais lu le lien, ça sert exactement à faire ce que le PO demande...


    Citation Envoyé par cs_ntd Voir le message
    D'après ce que j'ai compris, ce qui gène c'est pas de lancer le 2ème programme, mais d'arriver à savoir quand celui-ci a terminé ou non...
    Et la fonction system permet de bloquer jusqu'à ce que le programme soit terminé...

  10. #10
    Membre éclairé Avatar de Pistolero_JB
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Par défaut
    Citation Envoyé par souviron34
    non ceci est impossible dans son cas, puisque le 2ième programme il ne peut pas le modifier (matlab)..
    Comme SmileSoft avait écrit :

    Citation Envoyé par SimeSoft
    Programme2:matlab (je crée le .exe du code matlab à partir de matlab.
    J'en ai déduit qu'il avait les code sources et donc qu'il pouvait utiliser les fonctions socket de Matlab en changeant le script avant de faire un .exe...

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    j'avais lu, mais je crois (au vu du niveau) que ça ne doit pas être ce qu'il voulait dire..

    Mais bon, faut attendre qu'il réponde...

  12. #12
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    je vous remercie pour ces éclaircissements,
    Citation Envoyé par souviron34 Voir le message
    j'avais lu, mais je crois (au vu du niveau) que ça ne doit pas être ce qu'il voulait dire..

    Mais bon, faut attendre qu'il réponde...
    je voulais dire que c'est mon propre code, j'en ai l'accès, j'ai appris que les API windows le permet (shellexecute, CreatProcess(), ..) cependant je n'ai pas encore compris ce que la fonction systeme() peut me rapporter dans mon cas, je rappelle que mon souci n'est pas au niveau de l'appel, je cherche plutôt à me rassurer de la fin d'exécution du programme appelé.
    pour la notion des sockets je croyais qu'elle est propre seulement à la programmation réseaux (merci pour l'information Pistolero_JB).

    ps: mes programmes sont dans la même machine.

  13. #13
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ...
    Je sais bien que system("COMMANDE SHELL") s'utilise à partir d'un programme, mais c'est uniquement destiner à utiliser les fonctionalités de la console ! (d'ou "faire des scripts Shell/Batch")

    Bon il se trouve que je me rappelais plus que system() était bloquante donc pardon d'avoir été si virulant () sur la non-utilisation de system();

    Je trouve que ça reste pas beau dans un programme (un system() au milieux ), mais prenant en compte le fait que c'est bloquant, là ça va rester la solution la plus simple effectivement, je rejoins souviron sur ce point.

    SmileSoft>
    system("programmeMatlab.exe") va lancer ton programme, et attendre la fin de ce programme. Donc juste après cette instruction, tu peux directemetn tester si ton image est là et l'ouvrir, puisque MatLab aura finit sont traitement.

Discussions similaires

  1. Débutant, Communication entre deux programmes
    Par Madalen dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2007, 22h27
  2. Réponses: 2
    Dernier message: 09/06/2006, 19h34
  3. [TP] Echanger des données entre deux programmes
    Par ILIAS Raphaël dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/03/2005, 09h31
  4. Réponses: 7
    Dernier message: 30/12/2004, 12h01
  5. [jsp][servlet]passage de paramètre entre deux frames
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 29/06/2004, 11h14

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