Exécution d'une DLL Fortran depuis un programme Java - JNA
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) :
Code:
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 |
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.
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
Code:
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 Launch_DLL.java
Code:
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 ...");
}
} |
Voici le code du fichier FInterface.java
Code:
1 2 3 4 5 6
| import com.sun.jna.Library;
public interface FInterface extends Library
{
public void Ecriture();
} |
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".
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 :
Code:
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) |
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".
Je vous remercie par avance de l'aide que vous pourrez m'apporter.