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 :

[JNA] Invalid memory access


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2015
    Messages : 30
    Points : 27
    Points
    27
    Par défaut [JNA] Invalid memory access
    Bonjour à tous,

    Je dois faire appel à une fonction présente dans une dll C++. J'ai suivi le tuto de adiGuba ici

    Voici la signature le de fonction à utiliser dans la dll.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    __declspec( dllexport )  char* create_symbol(char* type,  int  intdata1, int intdata2, int intdata3, char* strdata1, char* strdata2, int& nb_port_left, int& nb_port_right, char**& port_names, char*& symbol_banner)
    Les paramètres type,intdata1/2/3 et strdata1/2 sont des entrées. D'après ce que j'ai compris on les passe par valeur simplement et JNA s'occupe des conversions nécessaires.
    Les paramètres nb_port_left, nb_port_right, port_names, symbol_banner sont passés par adresse. ce sont les valeurs de retours.

    J'ai créé l'interface DllImport qui doit hériter de jna.Library comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package jnatest;
     
    import com.sun.jna.Library;
    import com.sun.jna.Pointer;
    import com.sun.jna.ptr.IntByReference;
    import com.sun.jna.ptr.PointerByReference;
     
     
    public interface DllImport extends Library
    {
       String create_symbol(String _type, int _intdata1, int _intdata2, int _intdata3, String _strdata1, String _strdata2, IntByReference _nbPortLeft, IntByReference _nbPortRight, PointerByReference _portNames, String[] _symbolBanner);
    }

    Et ensuite le main

    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
    23
    24
    25
    26
    27
    28
    29
     
    package jnatest;
     
    import com.sun.jna.Native;
    import com.sun.jna.ptr.IntByReference;
    import com.sun.jna.ptr.PointerByReference;
     
     
    public class DllImportMain
    {
    	static
    	{
    		System.loadLibrary("mydll");
    	}
     
    	public static void main(final String[] args)
    	{
    		final String libName = "mydll";
     
    		final DllImport scerneImport = (DllImport)Native.loadLibrary(libName, DllImport.class);
     
    		final IntByReference _nbPortLeft = new IntByReference();
    		final IntByReference _nbPortRight = new IntByReference();
    		final PointerByReference _portNames = new PointerByReference();
    		final String[] _symbolBanner = new String[1];
     
    		scerneImport.create_symbol("eres", 1, 0, -1, "", "", _nbPortLeft, _nbPortRight, _portNames, _symbolBanner);
    	}
    }
    Et j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Exception in thread "main" java.lang.Error: Invalid memory access
    	at com.sun.jna.Native.invokePointer(Native Method)
    	at com.sun.jna.Function.invokePointer(Function.java:470)
    	at com.sun.jna.Function.invokeString(Function.java:651)
    	at com.sun.jna.Function.invoke(Function.java:395)
    	at com.sun.jna.Function.invoke(Function.java:315)
    	at com.sun.jna.Library$Handler.invoke(Library.java:212)
    	at com.sun.proxy.$Proxy0.create_symbol(Unknown Source)
    	at jnatest.ScerneImportMain.main(ScerneImportMain.java:32)
    Est-ce que c'est une erreur sur les type que j'utilise pour les pointeurs?

    Merci pour vos idées.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2015
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Et bien le problème s'est résolu de lui même me prototype de la fonction n'était pas le bon...

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

Discussions similaires

  1. GTK + memory access
    Par BTZ00 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 25/05/2012, 16h19
  2. org.eclipse.swt.SWTException: Invalid thread access
    Par LordDaedalus dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 12/02/2010, 11h23
  3. [MyEclipse] Pb "Invalid thread access"
    Par ibtissame_87 dans le forum Eclipse
    Réponses: 1
    Dernier message: 06/01/2010, 23h46
  4. Invalid thread access au démarrage d'Eclipse
    Par raz2008 dans le forum Eclipse
    Réponses: 1
    Dernier message: 26/09/2009, 15h56
  5. Composant crée dynamiquement & Access in invalid memory
    Par Sunchaser dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/02/2005, 01h03

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