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 : 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
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 : 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 Launch_DLL.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 ...");
	  }
}
Voici le code du fichier FInterface.java
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();
}
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 : 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 n’est 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.