Appel direct d'une DLL Fortran dans une macro
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:
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:
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:
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:
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:
Citation:
---- 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