Bonjour,
Je rencontre un problème pour charger une dll fortran à partir d'un programme java en utilisant JNA (JAVA Native Access).
Voici le code fortran "FortranDLL.for" utilisé pour générer la dll (FortranDLL.dll) :
Je génère donc cette dll à partir de Microsoft Visual Studio, et souhaite lancer la subroutine "Ecriture() à partir d'un programme Java pour générer un fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 subroutine Ecriture() !DEC$ ATTRIBUTES DLLEXPORT:: Ecriture !DEC$ ATTRIBUTES ALIAS : "Ecriture" :: Ecriture implicit none integer :: i open(11, file="fichier_test.dat") do i=0,100 write(11,*)i," ",i*i end do close(11) end subroutine Ecriture
Le code java est développé sous Eclipse. Mon programme se compose de trois fichiers :
- Main.java
- Launch_DLL.java
- FInterface.java
Voici le code du fichier main.java
Voici le code du fichier Launch_DLL.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class Main { @SuppressWarnings("unused") public static void main(String[] args) { Launch_DLL appel_dll = new Launch_DLL(); } }
Voici le code du fichier FInterface.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 import com.sun.jna.Native; public class Launch_DLL { public Launch_DLL() { // Chargement dynamique de la librairie FInterface demo = (FInterface) Native.loadLibrary("FortranDLL.dll", FInterface.class); demo.Ecriture(); System.out.println("chargement dynamique de la librairie réussi ..."); } }
Les fichiers FInteface.java et Launch_DLL.java sont utilisés pour gérer l'interface du code Java avec la dll. Je souhaite en exécutant cette dll générer un fichier "fichier_test.dat" via l'éxécution de la routine "Ecriture".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 import com.sun.jna.Library; public interface FInterface extends Library { public void Ecriture(); }
J'ai au préalable pris le soin de placer la dll dans le bon répertoire, et utilise la bibliothèque JNA (https://maven.java.net/content/repos.../jna-4.1.0.jar) pour compiler le système.
A la compilation du code, j'ai le message d'erreur suivant qui apparaît au moment de l'appel de la dll :
Travaillant sur une station de travail en 64 bits, j'ai d'abord pensé à un problème de compilation de la dll, mais je ne vois pas comment compiler autrement ma dll. Dans les options de Visual Studio, c'est bien "Microsoft Windows 32-bit" qui est sélectionné dans les propriétés de FortranDLL comme "Target Environment".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 nest pas une application Win32 valide. at com.sun.jna.Native.open(Native Method) at com.sun.jna.Native.open(Native.java:1759) at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260) at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398) at com.sun.jna.Library$Handler.<init>(Library.java:147) at com.sun.jna.Native.loadLibrary(Native.java:412) at com.sun.jna.Native.loadLibrary(Native.java:391) at Launch_DLL.<init>(Launch_DLL.java:9) at Main.main(Main.java:6)
Je vous remercie par avance de l'aide que vous pourrez m'apporter.
Partager