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

API standards et tierces Java Discussion :

Passage d'un tableau en argument d'une fonction d'une dll


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 9
    Par défaut Passage d'un tableau en argument d'une fonction d'une dll
    Bonjour à tous,
    voila mon problème : je dois utiliser (avec Java) des fonctions définies dans une dll construite par Labview dont je connais les prototypes. J'utilise donc JNA. Les fonctions de la dll sont utilisables mais je n'arrive pas à récupérer de tableaux.

    De façon à ce que les prototypes des fonctions définies dans la dll et dans Java soient compatibles, et que en java tous les arguments sont passés par valeur pour récupérer un argument de sortie je spécifie que les arguments sont passés par référence (DoubleByReference pour un double par exemple).

    exemple :
    Soit la fonction Sinus définie dans la dll par ce prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Sinus(double X, double *Sin);
    Je définit alors dans mon interface (pour le JNA) l'attribut suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Sinus(double X, DoubleByReference Sin);
    Ceci marche et lors de l'appel à la fonction : je retrouve bien le résultats dans le DoubleByReference Sin.

    Mais je ne sais pas comment faire pour passer un tableau par exemple dans une fonction avec pour prototype dans la dll :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SinusCosinus(double X, double SinCos[])
    qui est censée renvoyée une tableau de 2 éléments.

    Il faut que je trouve le bon mapping pour pouvoir récupérer mon tableau SinCos dans mon programme Java. J'ai essayer un tableau de DoubleByReference[] mais cela fait cracher la dll (trés certainement problème de réservation de la mémoire). Avec un simple DoubleByReference je ne récupère que le premier élément du tableau.

    Voici mon code en utilisant un simple DoubleByReference :
    interface pour le JNA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface CInterface extends StdCallLibrary 
    {	CInterface INSTANCE = (CInterface) Native.loadLibrary("NameLib", CInterface.class);
             public void SinusCosinus(double X, DoubleByReference SinCos);
    }
    Dans le programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CInterface lib = CInterface.INSTANCE;
    DoubleByReference SinCos = new DoubleByReference();
    lib.SinusCosinus(1, SinCos);
    System.out.println(Sin.getValue()); // ne me donne que la première case du tableau
    Avez vous une idée sur comment procéder pour récupérer un tableau en sortie ? Cela peut être au niveau du mapping (type de données non compatibles entre les 2 prototype) ou une façon d'accéder aux cases suivantes à partir du Pointer SinCos.

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 9
    Par défaut
    N'ayant pas trouvé de solution à mon problème je suis passé par JNI qui est plus compliqué à programmer mais qui est beaucoup plus clair en ce qui concerne les conversions des types de données entre JAVA et C++.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Passage d'une variable d'une fonction a une autre
    Par eilijah dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/09/2008, 15h49
  3. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  4. Réponses: 3
    Dernier message: 16/01/2006, 16h02
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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