cs_maxinformatique
Messages postés1Date d'inscriptionjeudi 25 janvier 2007StatutMembreDernière intervention25 janvier 2007
-
25 janv. 2007 à 19:23
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
23 avril 2008 à 16:15
Bjr tout le monde,
à fin d'utiliser la JNI j'essaye le premier programme HelloWorld,
la partie java est codée avec JCreator,
et la partie C++ est codée avec Dev-Cpp, et voici les étapes:
Codage de la partie java:
public class HelloWorld
{ static { System.loadLibrary("HelloWorld"); }
public static native void printCpp();
public static void main(String args[])
{ System.out.print("HelloWorld in java ");
HelloWorld.printCpp();
}
}
Je compile et copie la classe HelloWorld.CLASS dans le bin du JDK
Par la suite je génére le fichier d'entête C++ par la commande javah HelloWorld
Je copie le fichier d'entête HelloWorld.h dans le bin du Dev-Cpp
Je code la partie C++ dans un projet contenant deux sources files:
main.c
void main(void)
{ }
HelloWorld.c
#include "HelloWorld.h"
#include <stdio.h>
#include <jni.h>
JNIEXPORT void JNICALL Java_HelloWorld_printCpp(JNIEnv *env, jclass obj)
{// Un affichage sur la console en C++
printf("Hello world in C++");
}
Je compile, j'obtient HelloWorld.o main.o Makefile.win et une application HelloWorld
Je ne sais pas à quoi sert tout ça
Je génére la bibliothèque à chargement dynamique à l'aide de la ligne de commande:
g++ -o HelloWorld.dll -shared -I"C:\Dev-Cpp\bin" HelloWorld.c
Je copie en fin HelloWorld.dll dans le bin du JDK et j'éxecute, c'est la que j'obtient
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Rutime.loadLibrary()(Rutime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at HelloWorld.<clinit>(HelloWorld.java:2)
Je verifie mon path à l'aide de la commande path je trouve:
PATH=C:\WINDOWS\SYSTEM32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\program files\ATI Technologies\ATI Control Panel;
C:\program files\java\jdk1.6.0\bin;
C:\Dev-Cpp
Que dois-je faire d'après vous pour que mon pgm puisse s'éxecuter
A voir également:
Exception in thread "main" java.lang.error: unresolved compilation problem:
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 25 janv. 2007 à 21:05
Je ne connais absolument rien en Java, mais d'après ton message, je dirais qu'il manque un fichier relatif à ton programme dans le répertoire lib de Java, certainement Pragram Files/Java/Lib.
Ensuite quel fichier, je suis bien incapable de le dire.
D'ailleurs il me semblait que les programmes Java portaient l'extension .jar, alors que toi tu nous parle de .dll.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
supergaga1712
Messages postés5Date d'inscriptionlundi 18 février 2008StatutMembreDernière intervention24 avril 2008 23 avril 2008 à 16:09
Egalement, je pense qu'il y a un problème au niveau des types de chaînes de caractères, avec le format Unicode, qu'utilise Java. Il faut les convertir en ASCII pour le C, puis les reconvertir pour les envoyer vers java.
Ca se fait avec un "getStringUTFChars" il me semble.
Bon courage.
Vous n’avez pas trouvé la réponse que vous recherchez ?
heuuuuuu ici il n'utilise pas les
chaînes java... il fait simplement un printf("Hello world in
C++"); donc uniquement du C/C++...
Le GetStringUTFChars n'est
à utiliser que dans le cas ou tu veux exploiter dans un code C/C++
une chaîne de caractères java.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."