cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008
-
29 nov. 2007 à 17:04
cs_merioma -
14 avril 2008 à 12:47
Bonjour,
En Java, comment utiliser les fonctions de la librairie RAPI.dll pour les transferts entre Pc et Pocket ?
J'ai une appli java qui tourne sur pc avec un serveur jboss et je cherche à lire un fichier enregistré sur pda.
J'ai réussi à l'attacher, mais pas capable d'exécuter ses fonctions.
Quand je référencie la fonction CeRapiInit() par exemple:
public static native long CeRapiInit();
J'ai le message :
Error [action] Servlet.service() for servlet action threw exception
Java.lang.unsatisfieldLinkError: CeRapiInit.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 4 déc. 2007 à 14:11
SAlut,
deux solutions :
1 - Tu wrappes TOUTES les méthodes de rapi.dll afin de la rendre full compatible avec java
2 - Tu ne wrappes que les fonctions que tu as besoin.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 4 déc. 2007 à 14:36
je me suis mal exprimé, en effet il y a deux choses qui ne sont pas
encore clair pour moi.
1> je ne sais pas quoi mettre dans le programme c. est ce qu'il suffie
de declaré le nom de la methode qui est définie dans la dll.
2> une fois la classe c est compilé, est ce qu'il faut mettre
l'exécutable dans le projet java.
je te remercie pour tes explications
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 4 déc. 2007 à 14:49
Salut,
1 > je ne risque pas de le savoir pour toi. pour savoir ce que tu doit faire regarde l'exemple du 'print'
2 > Il ne faut pas faire un éxecutable mais une librairie dynamique, sinon oui il te faut mettre la librairie dans ton projet java afin que la jvm puisse trouver la définition des méthodes natives...
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 4 déc. 2007 à 15:16
Salut,
Dans la classe Test j'ai défini une méthode native CeRapiInit().
Après le lancement de la commande javah -jni -verbose Test, j'ai
obtenu le fichier Test.h :
***************************************
#include <jni.h>
/* Header for class Test */
#ifdef __cplusplus
}
#endif
#endif
************************************************
En suivant ton exemple j'ai défini un fichier Test.c ,
est ce que c'est suffisant pour l'utilisation de la methode CeRapiInit ?
#include "Test.h"
// notre dll main
#ifdef WIN32
#include <windows.h>
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 5 déc. 2007 à 15:53
Salut,
je cherche a compiler le programme c pour générer la librairie
dynamique.
je n'ai pas le C sur mon ordi par contre je l'ai sur un autre ordi
sous linux. Si je copié les 3 fichiers dans un répertoire sous linux
(Test.h, Test.c et jni.h) tu crois que c'est suffisant ?
Merci
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 5 déc. 2007 à 16:14
Salut,
ATTENTION : visiblement tu cherches à utiliser une api windoz pour faire ton programme donc si tu compiles la lib dynamique sous linux il est bien entendu que tu ne pourras pas l'utiliser sous windoz, de plus tu ne pourras pas non plus la compiler...
install visual express c++ sur ton windoz, il est gratos en plus...
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 6 déc. 2007 à 15:06
salut
j'ai installer visual c++, j'ai copier le fichier Test.h dans le
projet. J'ai crée un programme Test.c.
Aprés la compilation il m'affiche cette erreur :
fatal error C1083: Cannot open include file: 'jni.h': No such file
or directory
j'ai meme recopié le fichier jni.h dans le projet mais j'ai toujours
cette erreur.
est ce que tu as une idée, car c'est la premiere fois où j'utilise
visual c++
merci
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 6 déc. 2007 à 15:16
Salut,
oui, il te faut rajouter le rep <jdk>/include et <jdk>/include/windows dans le path de recherche des includes de ton IDE.... suit ce tutos ICI, à un moment il en parle pour le sdk de windows mais fait la même pour ceux du jdk
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 6 déc. 2007 à 19:35
Salut,
noooon, il ne faut pas enlever le
bool WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
return TRUE;
}
c'est le main de ta DLL donc si tu l'enlèves ça ne risque pas de fonctionner.....
limite enlève simplement les :
#ifdef WIN32
et
#endif
et remplaces le 'bool WINAPI DllMain' par 'BOOL WINAPI DllMain' vu que bool en minuscule est plus adapté au C++
"Une fois la compilation est faite, qu’est ce que je mets dans mon projet java car je ne connais pas trop en c.
" <---- relis les anciens poste je t'ai déjà répondu.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 7 déc. 2007 à 09:01
salut,
tu m'as dit qu'il faut ajouter la librairie dynamique dans le projet
java. quel est l'extention de ce fichier qu'il faut ajouter (je
no connais pas trop ni en c ni en c++) ?
merci
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 7 déc. 2007 à 11:04
salut,
oui mais en compilant mon programme c, je n'ai pas ce fichier .dll.
A part ma librairie Rapi.dll je n'ai pas un autre fichier .dll.
je ne sais pas quoi ajouté dans mon projet java pour enfin tester
est ce que je peux utiliser la methode CeRapiInit de la librairie
Rapi.dll?
merci
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 7 déc. 2007 à 14:08
salut,
Excuser moi pour toutes ces questions.
une fois j'ai mon fichier.dll, est ce que il suffit de le mettre dans
mon projet java ou il faut que je le charge à partir de mon programme
avec System.loadLibrary()?
merci
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 7 déc. 2007 à 14:34
Salut,
"
oui mais sur visual c++, il ne me donne pas la possibilité de
choisir le type de projet."
je ne fais pas support pour les IDE MS... de plus à mes yeux tu ne fais pas de JNI si tu ne connais pas bien le java et surtout le C/C++....
"...est ce que il suffit de le mettre dans
mon projet java ou il faut que je le charge à partir de mon programme
avec System.loadLibrary()?
"
heuuuuu, tu lis mes réponses ? si tu reprend un de mes premiers postes (page 1) tu verras :
"Pour exécuter l'application dans un premier temps le mieux est de mettre l'option '-Djava.library.path=chemin' à la ligne de lancement sinon, si tu ne veux pas te prendre la tête sous windoz tu rajoutes la lib dans le système32."
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 10 déc. 2007 à 10:45
salut,
j'ai réussie a configurer visual c++ pour avoir le choix de créer un
projet dll.
dans le repertoire "source file" j'ai mon programme TestRapi.c :
************************************
#include "Test.h"
#include <windows.h>
Aprés la compilation je ne trouve pas dans le projet le fichier .dll
que je cherche.
je trouve projet.ncb , projet.sln, projet.suo.
est ce que tu as ideé ?
merci