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 :

appel d'idl depuis un programme C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut appel d'idl depuis un programme C++
    Bonjour à tous.

    Je programme en C++, mais je dois utiliser un programme que l'on m'a remis qui est lui écris en IDL. J'ai trouvé sur ce site un sujet qui ressemblait pas mal à mon problème, mais qui n'a pas suffit (il s'agit de http://www.developpez.net/forums/d34...ramme-externe/) . J'ai essayer d'écrire les commandes dans un fichier toto.idl, puis de faire system("idl test.idl") mais cela me renvoie comme erreur 'sh : idl : not found' . J'ai toutefois noté que si j'écrivais directement 'idl test.idl' dans la console, cela marchait très bien.

    En cherchant sur le site sur le lien ci-dessus, j'ai voulu tester exec, mais j'avoue ne pas avoir bien compris le fonctionnement et par conséquent, je n'ai pas réussi par ce moyen non plus. Je n’avais d'ailleurs pas vraiment d'exemples pour m'expliquer le fonctionnement, mais près un peu de réflexion, je ne suis pas vraiment sur que cela corresponde à mon problème.

    En bonus, si déjà ce premier problème est réglé, j'aurais aimer ajouter un autre problème qui se posera naturellement à la suite: IDL met du temps à s'ouvrir et je compte mettre cet appel dans une boucle. Est-il possible d'ouvrir idl avant la boucle (par exemple dans une autre console) tout en enchaînant dans la boucle les commandes pour idl et celles pour C++, afin de ne pas avoir à ouvrir et fermer idl 50 fois (enfin, sûrement bien plus) dans le programme?

    Merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par HDOsiris Voir le message
    J'ai essayer d'écrire les commandes dans un fichier toto.idl, puis de faire system("idl toto.idl") mais cela me renvoie comme erreur 'sh : idl : not found' . J'ai toutefois noté que si j'écrivais directement 'idl toto.idl' dans la console, cela marchait très bien.
    System fait appel à sh, et ta console fait généralement appel à bash or il ne me semble pas que sh regarde le PATH pour rechercher les commandes (à vérifier).

    Citation Envoyé par HDOsiris Voir le message
    En cherchant sur le site sur le lien ci-dessus, j'ai voulu tester exec, mais j'avoue ne pas avoir bien compris le fonctionnement et par conséquent, je n'ai pas réussi par ce moyen non plus. Je n’avais d'ailleurs pas vraiment d'exemples pour m'expliquer le fonctionnement, mais près un peu de réflexion, je ne suis pas vraiment sur que cela corresponde à mon problème.
    De mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execlp("idl", "toto.idl", NULL);
    Cf http://man.developpez.com/man3/exec.3.php

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Merci pour la réponse. J'ai testé, et je n'ai plus de message d'erreur (ce qui est un bon début), mais pas plus résultats... (ce qui est certes moins sympa). J'ai mis '#include<unistd.h>' en début de programme comme l'indique le lien vers les commandes exec.

    A part cela, le reste du programme marche bien, désormais.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Est-ce que tu peux nous :
    - dire exactement ce qu'il se passe au moment de l'exécution ;
    - montrer ton code source modifier ;
    - montrer le résultat de la commande "whereis idl" dans ta console?

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Au moment de l’exécution, il ne se passe rien de particuler, cela me fait juste:
    > g++ test.cpp
    > a.out test
    sans plus de commentaire de la part de la console.

    pour whereis, j'obtiens:
    > whereis idl
    idl: /usr/share/idl
    et enfin, pour mon code source, cela fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include<iostream>
    #include<fstream>
    #include<stdlib.h>
    #include<unistd.h>
     
    using namespace std;
     
    int main()
    {
      int i;
      double aa,bb,cc,dd,ee,ff,gg,hh,d,q;
     
      d=1.122965;
      q=0.042412;
     
      for (i=0;i<5;i++)
        {
          fstream test("test.idl",ios::out);
          test <<".r NOMDUFICHIER" <<endl;
          test <<"CRITICS,"<<d<<","<<q<<""<<endl;
          test <<"exit"<<endl;
          test.close();
     
          execlp("idl","test.idl",NULL);
     
     
          ofstream val("test.txt",ios::app);
          fstream read("caustics.txt",ios::in);
     
          read>>aa>>bb;
          read>>cc>>dd;
          read>>ee>>ff;
          read>>gg>>hh;
     
          val<<ee<<"   "<<bb<<endl;
          read.close();
          val.close();
     
          q=q+q/100;
        }
     
      return 0;
    }
    Sachant que caustics.txt est le fichier censé être créé par idl. De fait, ce fichier étant inchangé, j'ai le droit à cinq fois le même résultat, ce qui ne m’intéresse pas des masses.
    Je précise que j'ai testé au passage la commande execlp avec gnuplot : il m'a ouvert gnuplot mais n'y a pas exécuté les commandes que j'avais mis dans un fichier .gnu pour le test.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par HDOsiris Voir le message
    Au moment de l’exécution, il ne se passe rien de particuler, cela me fait juste:

    > g++ toto.cpp
    > a.out toto

    sans plus de commentaire de la part de la console.
    ça c'est la compilation, l'exécution c'est quand tu fais le ./executable .


    Pour ton code source, pense à mettre les balises [ code] (supprime l'espace).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double aa,bb,cc,dd,ee,ff,gg,hh,d,q;
    Il vaudrait mieux que tu créé un tableau avec un nom explicite.

    Sinon, que te retourne execlp?

Discussions similaires

  1. appel de pthread depuis un programme C
    Par Ben2903 dans le forum C
    Réponses: 3
    Dernier message: 17/08/2012, 09h24
  2. [D7] Appeler ShutDown.EXE depuis un programme.
    Par bvsud dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/10/2009, 21h51
  3. Réponses: 20
    Dernier message: 08/09/2006, 10h55
  4. Réponses: 4
    Dernier message: 01/06/2006, 15h55
  5. Réponses: 4
    Dernier message: 01/05/2006, 14h37

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