IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Dll Jna, demande de lecture de fichier texte


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut Dll Jna, demande de lecture de fichier texte
    Bonjour j'avais un programme en Fortran qui via une méthode récupérait un fichier texte, le "parsait", récupérerai des infos faisait des calcul et restituait un autre fchier texte.
    Je voudrais compiler ce Fortran sous forme de DLL, la charger via JNA dans un programme Java, pour lancer ce Fortran déguisé en dll.
    est ce possible?
    car pour le moment voilà ce que je recolte
    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
    "C:\Program Files\Java\jdk1.8.0_92\bin\java" -Djava.library.path=C:\Users\ozenasni\Desktop -Didea.launcher.port=7550 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_92\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\rt.jar;Y:\Fconncetion\out\production\Fconncetion;C:\Users\ozenasni\Downloads\jna-4.2.2.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.ec2.AppOne
    jna.library.path: C:\Users\ozenasni\Desktop
    CALCUL EN COURS 
    Exception in thread "main" java.lang.Error: Invalid memory access
    LECTURE DONNEES 
    	at com.sun.jna.Native.invokeInt(Native Method)
    TEST001 
    	at com.sun.jna.Function.invoke(Function.java:390)
    	at com.sun.jna.Function.invoke(Function.java:323)
    	at com.sun.jna.Library$Handler.invoke(Library.java:236)
    	at com.ec2.$Proxy0.startOne(Unknown Source)
    	at com.ec2.AppOne.main(AppOne.java:24)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut
    Je reviens...

    Voilà la structure de mon code en fortran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROGRAM Main
    Start()
    END PROGRAM
     
    SUBROUTINE Start()
    OPEN(file= "myFile")
    END SUBROUTINE
    J'en fais une DLL

    que j'appelle via une méthode depuis un programme Java:
    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
    public class App1 {
     
        static {
            // Set and print jna.library.path
            // Native.setProtected(false);
     
            System.setProperty("jna.library.path", System.getProperty("java.library.path"));
            System.out.println("jna.library.path: " + System.getProperty("jna.library.path"));
     
     
        }
     
     
        public static void main(String[] args) {
            JFConnect.lib.startOne();
     
        }
     
    }
    voilà l'interface JFConnect:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import com.sun.jna.*;
     
    public interface JFConnect extends Library {
     
        JFConnect lib = (JFConnect) Native.loadLibrary("calculEC2", JFConnect.class);
        void startOne();
     
    }
    Lorsque "Java" fait appelle à la méthode start() de ma librairie, qui elle même appelle un "open(file)" ça "crash"
    Si quelqu'un peut m'orienter

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Et en faisant une version EXE du code fortran il tourne sans bug ?

    Pour la dll, il ne manque pas des export style ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !DEC$ ATTRIBUTES DLLEXPORT :: MY_SUB
    ou
    Sinon n'oublies pas de fire un close du fichier ouvert dans le code fortran (a moins que tu ais juste posté une version ultra minimaliste exprès)

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut
    Je viens de tester le .exe, nickel
    En effet c'est une version minimaliste
    sinon voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MODULE MODULE1
    CONTAINS
    SUBROUTINE startOne () BIND(C, name='startOne')
    !DEC$ ATTRIBUTES DLLEXPORT :: startOne
    .
    OPEN (4,file='FICHIER_DONNEES.txt',status='old',form='formatted',action='READ')
    .
    END SUBROUTINE
     
    PROGRAM CALCUL_TOTAL
    USE MODULE1 
        CALL startOne()
    END
    pour le dllexport je l'ai fais sur ma subroutine qui me sert de point d'entrée.
    Il faut savoir que la méthode qui "bute" est une méthode que je n'ai pas conçu en fortran mais qui fait partie du langage OPEN(...).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/11/2006, 20h57
  2. [C#]Lecture gros fichier texte
    Par kekesilo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/05/2006, 13h58
  3. Lecture d´un fichier texte .
    Par pilouface dans le forum C
    Réponses: 5
    Dernier message: 20/01/2006, 23h48
  4. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  5. lecture de fichier texte
    Par prorider dans le forum C
    Réponses: 36
    Dernier message: 08/09/2004, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo