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:
type,public :: ObjetF
integer(kind=4),pointer :: ptr1,ptr2
end type
en C:
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
Partager