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:
Le Makefile permet entre autre de créer un fichier EX.DLL comprenant la subroutine increm.
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 ----------------------------------------
En plus de ce fichier EX.DLL, j'a creé un fichier .DEF:
La compilation sous PHOTRAN s'effectue normalement et le dll est crée.
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 --------------------------------------------------------
Dans Micorsoft Visual basic, j'ai créé les sub suivantes pour tester la dll EX.DLL:
La compilation s'effectue normalement, mais j'ai des problèmes lors de l'exécution:
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 '-------------------------------------------------------------
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.---- Message d'erreur ------------------------
Erreur d'exécution '453'
Point d'entrée increm d'une dll introuvable dans:
D:\Essai_dll\essai\EX.DLL
---------------------------------------------
Pas simple cette affaire..........!!!!
Pourriez vous me donner des indications si vous avez déjà eu des problèmes semblables...?
Merci,
Papiotte
Partager