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 :

utilisation d'un .so avec jna


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut utilisation d'un .so avec jna
    bonjour,
    comme indiquer dans le titre il faut que j'arrive a utiliser un .so programmer par moi.
    mon problème est que je n'arrive pas a récupéré les valeurs de variable simple, explication, voici mon code source du .so
    le .h
    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
    class WestgardInterface {
     
    private:
     
        static WestgardInterface *ms_instance;
     
    protected:
     
    /*CONSTRUCTOR*/
        WestgardInterface();
     
    public:
        /*DESTRUCTOR*/
        ~WestgardInterface();
     
        static WestgardInterface *getInstance();
     
    public:
        void WGevaluate( Measure m, double mean, double sd);
    };
     
    extern "C" void WGevaluate( Measure m, double mean, double sd){
        WestgardInterface* lib = WestgardInterface::getInstance();
        return lib->WGevaluate( m, mean, sd);
    }
    le .cpp
    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
    WestgardInterface *WestgardInterface::ms_instance = nullptr;
     
    /** @details Constructor*/
    WestgardInterface::WestgardInterface(){
        // TODO Auto-generated constructor stub
    }
     
    /** @details Destructor*/
    WestgardInterface::~WestgardInterface() {
        // TODO Auto-generated destructor stub
    }
     
     
    WestgardInterface *WestgardInterface::getInstance(){
        if (nullptr == ms_instance)
        {
            ms_instance =  new WestgardInterface();
        }
        return ms_instance;
    }
    void WestgardInterface::WGevaluate(Measure m, double mean, double sd) {
        cout<<"measure"<<m.getValue()<<endl<<m.getDate();
        cout<<"mean"<<mean<<endl<<"sd"<<sd<<endl;
    }
    je n'affiche pas les fichier de la classe measur car cette classe fonctionne correctement, enfin je suppose
    voici maintenant les fichier coter java avec dans un premier temps l'interface de déclaration de la lib et des fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public interface InterfaceLibWestgard extends Library {
     
    void WGevaluateWithListOnly(WGInputs.ByValue input);
     
    static InterfaceLibWestgard INSTANCE = (InterfaceLibWestgard) Native.loadLibrary("../logic/resources/calculator/libuntitled.so", InterfaceLibWestgard.class);
    }
    la classe wginput
    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
     
    public class WGInputs extends Structure {
    	public Measure.ByValue m;
    	public double mean;
    	public double sd;
     
     
     
    	public static class ByValue extends WGInputs implements Structure.ByValue {}
     
    	@Override
    	protected List<String> getFieldOrder() {
    		return Arrays.asList(new String[] { "m" , "mean" , "sd" }); // native variables order
    	}
     
    }
    enfin 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
    public class Westgard {
        static {       
            System.setProperty("jna.library.path","../logic/resources/calculator");
        }
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		WGInputs.ByValue jnaInputs = new WGInputs.ByValue();
    		Measure.ByValue m = new Measure.ByValue();
    		m.valeur = 18;
    		Date.ByValue d = new Date.ByValue();
    		d.m_day = 10;
    		d.m_month = 10;
    		d.m_year = 10;
    		d.m_hour = 12;
    		d.m_min = 12;
    		d.m_sec = 12;
    		m.date = d;
    		jnaInputs.m = m;
    		jnaInputs.mean = 7.5;
    		jnaInputs.sd = 4d;
    		InterfaceLibWestgard.INSTANCE.WGevaluateWithListOnly(jnaInputs);
     
    	}
     
    }
    et donc en sortie le terminal devrait m'afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    measure18
    date = 10/10/10
    heure = 12:12:12
    mean 7.5
    sd4
    or voila ce que j'obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    measure18
    date = 10/10/10
    heure = 12:12:12
    mean0
    sd3.51276e+151
    pour info j'ai déja tester pas mal de chose tel que le changement de type la creation d'une autre classe mais rien n'y fait impossible d'obtenir le bon résultat

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Voici la réponse qui est vraiment toute conne mais bon faut bien apprendre.
    En fait il suffit d’intégrer directement les type mean et sd dans la definition de la fonction côté java comme ceci

    void WGevaluateWithListOnly(WGInputs.ByValue input, float mean, float sd);

    côté java on peux enlever toute les références a ces deux variables

Discussions similaires

  1. Utilisation API C Ghostscript avec JNA
    Par snay13 dans le forum Débuter
    Réponses: 10
    Dernier message: 15/08/2010, 07h43
  2. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33
  3. comment utiliser de l'OpenGL avec du Java ?
    Par DjiZ dans le forum OpenGL
    Réponses: 3
    Dernier message: 14/01/2004, 15h21
  4. Utilisation simple d'@@IDENTITY avec asp
    Par Ajrarn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/10/2003, 10h37
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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