2010-02-02 7 views
0

J'ai une application de console VB.net et j'ouvre une fonction dans une DLL écrite en fortran. Je passe 3 tableaux à travers la fonction par référence. Quand ils reviennent de l'autre côté, ils ont tous des tunnels d'un seul élément. Et cet élément est 0.Passer des tableaux par l'intermédiaire de fortran dll de l'application vb.net se tournant vers des tableaux d'éléments simples. Devrais-je passer seulement le premier élément?

Je lis sur Internet quelque part que lorsque vous faites ce genre de chose, c'est une bonne idée de ne faire passer que le premier élément du tableau dans la fonction. J'ai essayé de changer ma déclaration de fonction pour accepter des éléments simples plutôt que des tableaux à une seule dimension, et maintenant les tableaux ont la même longueur avant et après l'appel de fonction, mais ils ne semblent pas changer du tout, donc je ne suis pas sûr cela fonctionne.

N'importe qui a déjà eu des problèmes comme ça ou sait quoi essayer? Toute aide serait très appréciée.

Répondre

0

Les fonctions FORTRAN ne reçoivent que des pointeurs, qu'il s'agisse d'un tableau ou d'une seule valeur.

Je ne sais pas comment vous pouvez le faire dans VB.net, mais essayez de trouver le moyen d'envoyer le pointeur vers le premier élément.

En C, ce serait:

double *a = ...; 
fortran_func(a); // or... 
fortran_func(&a[0]); 

En outre, assurez-vous d'envoyer le bon type de virgule flottante (réel * 8 vs real * 4, pour le double contre simple précision). Une fois dans FORTRAN, vous ne serez pas en mesure de connaître la taille du tableau, vous devrez l'assumer.

SUBROUTINE fortran_func(a) 
    real*8 a(16) 
    ... 
END 

si la taille est pas statique, peut-être faire quelque chose comme ça

SUBROUTINE fortran_func(a,sz) 
    real*8 a(sz) 
    integer sz 
    ... 
END 

ensuite envoyer l'entier aussi comme un pointeur. En C ce serait:

int sz=16; 
fortran_func(a,&sz);