Bonjour à tous,

J'essaie de faire passer un tableau entre un programme en VB à une Dll en Fortran pour faire des calculs sur ce tableau. Il me semble que la matrice ne se remplit pas correctement. Je mets ci-dessous un exemple. Celui-ci consiste à faire entrer une matrice (Matin) dans la dll fortran, celle-ci est censée multiplier par 2 chaque élement de la première ligne et multiplier par 3 les éléments de la première colonne et retourner le résultat dans une autre matrice (Matout). Voici les codes vb et fortran

Prog Fortran
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
subroutine resJCH (Matin, Matout, nl, nc)
!DEC$ ATTRIBUTES DLLEXPORT, ALIAS : "RESJCH" :: RESJCH
	integer ( kind = 4 ) i 
	real ( kind = 8 ), intent(in) :: Matin(0:nl-1,0:nc-1)
	real ( kind = 8 ), intent(out) :: Matout(0:nl-1,0:nc-1)

	Matout=0
	
	Do i = 0,nl-1
	Matout(0,i) = 2*Matin(0,i)
	end do
	Do i = 0,nc-1
	Matout(i,0) = 3*Matin(i,0)
	end do

   return
end
Prog VB

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
Public Class Form1
    Declare Sub RESJCH Lib "minpack.dll" (ByRef MATX As Double, ByRef MATF As Double, ByRef n1 As Integer, ByRef n2 As Integer)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '''' TEST Function of MODULE COMPUTE1

        Dim nl, nc As Integer
        Dim xin(,) As Double = {{1, 1, 1}, {1, 1, 1}}
        Dim xout(,) As Double = {{1, 1, 1}, {1, 1, 1}}

        nl = xin.GetLength(1)
        nc = xin.GetLength(0)

        RESJCH(xin(0, 0), xout(0, 0), nl, nc)
    End Sub
End Class
Mon problème est que la matrice sortante de la dll est fausse, je n'ai pas trouvé de logique au remplissage de cette matrice (il inverse sans doute colonnes et lignes mais pas seulement).
Connaissez vous un moyen de résoudre ce problème ?

Merci d'avance,

Juliette