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

Fortran Discussion :

Interface Fortran pour fonction C avec un char** en paramètre


Sujet :

Fortran

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 37
    Points : 32
    Points
    32
    Par défaut Interface Fortran pour fonction C avec un char** en paramètre
    Bonjour a tous,

    je pense que le titre est assez explicit,
    J ai une fonction c:
    void Foo (char** name)
    et j aimerai implementer une interface pour fortran 90
    j'ai dejà réaliser des interfaces pour des parametres char*
    exemple:
    fonction c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Foo(char* name){...}
    interface fortran (dans un .c):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void foo(char* fname, long int string_length){
      char* name;
      int i;
      name = (char*)malloc(sizeof(char)*(string_length+1));
      for (i=0;i<string_length;i++){
        name[i]=fname[i];
      }
      name[i]='\0';
      Foo(name);
      free(name);
    }
    Ceci marche sans probleme, quelqu'un sait il si il est possible d'implémenter
    une interface similaire (ou pas) pour un char * *?

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Je ne garantis rien, mais...

    En Fortran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    integer Ptr
    character (...) Str
    Ptr = loc(Str) ! Attention, loc() non standard
    call FonctionC(Ptr) ! Passe l'adresse de Ptr contenant l'adresse de Str.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    merci sylvain
    en fait je recupère l'adresse de ma liste de chaine dans le
    front end c, mon probleme est plus dans le traitement c.

    quand j appelle ma fonction en fortran:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CHARACTER*25 LIST(3)
    LIST(1)='A'
    LIST(2)='B'
    LIST(3)=' '
    CALL FOO(LIST)
    je recupere bien l adresse dans le front end c, ainsi que la longueur
    de chaque chaine (string_length=25)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void foo(char** flist, long int string_length){
    ...
    }
    Donc mon probleme serait plutot du c
    (message mal placé?)
    j poste la soluce des que j'y suis

    Juste par curiosité, sylvain, t'aurais pas fait un bts vers la rochelle?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Bon j'ai trouver la solution,
    en fait quand j appelle ma fonction en fortran:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CHARACTER*25 LIST(3) 
    LIST(1)='A' 
    LIST(2)='B' 
    LIST(3)=' ' 
    CALL FOO(LIST)
    je recupere bien l adresse dans le front end c, ainsi que la longueur
    de chaque chaine (string_length=25),
    mais le type que je récupère n'est pas un char**
    mais un char* de taille 75
    donc le bon prototype pour récupérer mon appelle en c est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void foo(char* flist, long int string_length)
    {/*avec strlen(flist)=75 et string_length=25*/}
    
    Et non pas:
    void foo(char** flist, long int string_length)
    Je rappelle juste que le but était de créer une interface fortran pour appeler ma
    fonction c
    Voila, j'espère que le post était bien placé.

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

Discussions similaires

  1. Fonction JavaScript avec un tableau en paramètre
    Par Msysteme dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 19/05/2014, 08h21
  2. Réponses: 8
    Dernier message: 16/01/2013, 20h31
  3. Interface Flash pour fonction C
    Par carter15_2001 dans le forum Flash
    Réponses: 5
    Dernier message: 11/02/2008, 08h39
  4. Réponses: 1
    Dernier message: 25/07/2007, 10h03
  5. Comment interfacer une apllication pour mobile gsm avec une application sur pc
    Par appsn dans le forum Développement Mobile en Java
    Réponses: 2
    Dernier message: 19/08/2006, 13h22

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