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 :

SWIG ne genere pas les bonnes methodes!


Sujet :

API standards et tierces Java

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut SWIG ne genere pas les bonnes methodes!
    Bonjour a tous,

    Voilà j'ai une dll ecrite en c++ que je dois appeller depuis Java. Pour me faire la main avec swig je me suis fais une petite appli c++, toute conne (une seule classe)

    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
     
     
    fichier.h
    class test{
          public : 
                 test();
                 int add(int a, int b);
    };
     
    fichier.cpp
    #include "test.h";
     
    test::test(){
    }
     
    int test::add(int a, int b){
        return a+b;
    }
    puis j'ai donner a manger ça à swig :
    swig -c++ -java -Wall testswig.i

    avec testswig.i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %module testswig
     
    %{
      #include "test.h"
    %}
     
    class test{
          public : 
                 test();
                 int add(int a, int b);
    };
    apres la commande il me genere 3 fichiers java:
    testswig.java ==> vide (enfin juste la declaration de la classe)
    test.java ==> l'equivalent de ma classe c++

    testJNI.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
     
    /* ----------------------------------------------------------------------------
     * This file was automatically generated by SWIG (http://www.swig.org).
     * Version 1.3.31
     *
     * Do not make changes to this file unless you know what you are doing--modify
     * the SWIG interface file instead.
     * ----------------------------------------------------------------------------- */
     
     
    class testswigJNI {
      public final static native long new_test();
      public final static native int test_add(long jarg1, test jarg1_, int jarg2, int jarg3);
      public final static native void delete_test(long jarg1);
    }
    en fait ma classe test.java ne fais que appeller ces methodes. Jusque là tout me semble correcte

    Enfin il me genere un fichier .cxx totalement inbuvable. j'ai fais une dll avec le fichier .cxx et le test.cpp que j'ai placé dans mon path.

    et quand j'essai d'appeller l'objet "test" en java, j'ai une erreur à l'execution :

    Exception in thread "main" java.lang.UnsatisfiedLinkError: new_test
    at testswigJNI.new_test(Native Method)
    at test.<init>(test.java:36)
    at testswig.main(testswig.java:16)

    Ce qui signifie qu'il trouve bien ma dll, mais pas les methodes natives. En cherchant un peu j'ai remarqué qu''elles ne sont pas dans le .cxx.

    Comment ca se fais qu'elles ne sont pas dans ce fichier? ai je oublié une etape en route?

    Voilà si quelqu'un a une idée...

    désolé d'avoir été un peu long, j'espere avoir été complet à defaut d'etre clair

    edit : correction d'une faute de frappe

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    tout compte fait j'ai reussi avec bien du mal...

    J'avais mal ciblé le problème... le soucis venait de la compilation de ma dll où il manquait des options.

    pour info voici la ligne de compilation :

    g++ -shared obj.o [ obj2.o obj3.o ...] -mno-cygwin -Wl,--add-stdcall-alias -o c:\windows\malib.dll

    (je la mets dans c:\windows pour ne pas etre emmerder pour la retrouvée)

    A bientot...

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

Discussions similaires

  1. La commande shortcut n'affiche pas les bonnes infos
    Par DeVit dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 11/05/2011, 14h25
  2. Requete qui n'affiche pas les bonnes valeurs
    Par snips67 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/01/2010, 10h54
  3. wsdl2java ne genere pas les stubs et les skeletons Aidez-moi
    Par r_asmak dans le forum Services Web
    Réponses: 1
    Dernier message: 19/09/2008, 15h52
  4. il me copie pas les bonnes colonnes
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/07/2007, 16h01
  5. [SQL] Pb Mysql n'insert pas les bonnes valeur dans la bdd
    Par potao dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/02/2007, 03h12

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