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)
puis j'ai donner a manger ça à swig :
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; }
swig -c++ -java -Wall testswig.i
avec testswig.i
apres la commande il me genere 3 fichiers java:
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); };
testswig.java ==> vide (enfin juste la declaration de la classe)
test.java ==> l'equivalent de ma classe c++
testJNI.java :
en fait ma classe test.java ne fais que appeller ces methodes. Jusque là tout me semble correcte
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); }
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
Partager