Bonjour,

Je suis tout nouveau sur ce site. Je souhaite actuellement créer des dll fortran pour les utiliser directement dans une macro vba excel.

Pour cela, je test une application simple. J'ai donc crée une subroutine fortran f90 par l'intermédiaire de PHOTRAN (Via cygwin):

Code fortran : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
------ex.f90---------
SUBROUTINE increm(i)
IMPLICIT NONE
INTEGER*4 i
i=i+1
RETURN
END
---------------------

Je compile ce fichier fortran avec le compilateur mingw32-make.exe:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
------ Makefile -------------------------
all: EX.DLL
 
ex.o: ex.f90
	g95 -c ex.f90
 
EX.DLL: ex.o
	g95 -shared -mrtd -o EX.DLL ex.o
 
clean:
	rm -i ex.o
----------------------------------------
Le Makefile permet entre autre de créer un fichier EX.DLL comprenant la subroutine increm.

En plus de ce fichier EX.DLL, j'a creé un fichier .DEF:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
---------EX.DEF---------------------------------------
      ; EX.DEF - Module Definition file for ex.f90
      ;
      LIBRARY            EX
      DESCRIPTION     'Sample FORTRAN DLL'
      EXETYPE           WINDOWS 3.0
      CODE               PRELOAD MOVEABLE DISCARDABLE
      DATA               PRELOAD MOVEABLE SINGLE
      HEAPSIZE         1024
      EXPORTS          increm
                            WEP
--------------------------------------------------------
La compilation sous PHOTRAN s'effectue normalement et le dll est crée.

Dans Micorsoft Visual basic, j'ai créé les sub suivantes pour tester la dll EX.DLL:

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
19
20
21
22
'------------------------------------------------------------------------
Private Declare Sub increm Lib "D:\Essai_dll\essai\EX.DLL" (ByVal d As Long)
 
Private Sub CommandButton1_Click()
 
    Dim utilisateur, bonjour As String
    utilisateur = Environ("username")
    bonjour = MsgBox(prompt:="Utilisateur " & utilisateur & ", voulez vous lancer le programme?", Title:="Ma 1ere boite de dialogue")
    TextBox1.Text = "10"
    Dim lngTest As Long
    lngTest = 10
    Call increm(lngTest)
 
End Sub
 
Private Sub CommandButton2_Click()
 
    Unload Me
 
End Sub
 
'-------------------------------------------------------------
La compilation s'effectue normalement, mais j'ai des problèmes lors de l'exécution:

---- Message d'erreur ------------------------
Erreur d'exécution '453'

Point d'entrée increm d'une dll introuvable dans:

D:\Essai_dll\essai\EX.DLL
---------------------------------------------
Il trouve la dll EX.DLL dans l'emplacement spécifié mais ne reconnait pas la subroutine increm. Les variables d'environnement ont bien été implémentées.

Pas simple cette affaire..........!!!!

Pourriez vous me donner des indications si vous avez déjà eu des problèmes semblables...?

Merci,

Papiotte