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 :

[Fortran 90] Compatibilité entre types dérivés Fortran avec pointeurs et structures C


Sujet :

Fortran

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Par défaut [Fortran 90] Compatibilité entre types dérivés Fortran avec pointeurs et structures C
    Bonjour,

    Mon problème apparaît sur une machine HP-UX10 et sur une machine Linux 64bits.

    J'essaie de faire communiquer C et Fortran (90), avec une fonction C appelée depuis un programme Fortran. Le problème n'est pas dans l'appel, ni dans les arguments.

    J'utilise des types dérivés Fortran contenant des pointeurs, alloués et initialisés dans le prog Fortran. Je définis les structures C correspondant à ces types dérivés en prenant garde aux dimensions des éléments (integer(kind=4) <==>int, real(kind=4) <==> float) et à l'ordre éléments dans les 2 langages.

    Apparemment, lorsqu'un membre est un pointeur Fortran, ma structure C n'est pas bonne. Je déclare par exemple 2 int *p,*q en C pour 2 integer,pointer :: ptr1,ptr2 en F90 (j'en mets 2 car avec 1, ça marche, mais pour le 2ieme, non). Une simple impression de p et q (adresses + valeurs) dans ma fonction me donne un résultat faux pour q. Je pense que la taille prise par un integer,pointer Fortran n'est celle d'un int* et ça semble logique puisque le pointer Fortran est un objet complexe.

    En F90 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type,public :: ObjetF
    integer(kind=4),pointer :: ptr1,ptr2
    end type
    En C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct objetC {
    int *p,*q;
    } objetC;
    Quelle correspondance peut-on établir entre les 2 objets type F et struct C ?
    Simple problème d'alignement ? je n'y crois pas.

    Merci à vous.
    Harold

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut
    Bonjour,

    attention rien dans la norme Fortran 90 ou C ne garantit ce genre compatibilité! Pour Fortran 2003 cela sera le cas.

    Et surtout, un pointeur Fortran 90 n'est pas un pointeur C! Ce n'est pas du tout la même notion.

    Dans ton cas, il faudra copier membre à membre les données de ta structure C vers les membres de ton type dérivé Fortran. Tu ne peux pas faire correspondre les deux objets.

Discussions similaires

  1. probleme avec pointeur et structure
    Par nyergk dans le forum C
    Réponses: 2
    Dernier message: 18/12/2012, 10h53
  2. [DLL C++] Compatibilité de type avec Delphi
    Par almoude dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 28/10/2011, 14h49
  3. Réponses: 4
    Dernier message: 18/04/2008, 17h45
  4. Problème de compatibilité de types avec Delphi et SQLServer
    Par scrat88 dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/05/2006, 11h31
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 13h19

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