julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 7 déc. 2007 à 14:53
Va voir ce tutorial de racpp qui explique comment configurer VS2005 express.
Par défaut, tu ne peux pas générer de dll avec VS2005 express, mais en le configurant correctement, cela devient possible!
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 10 déc. 2007 à 10:42
salut,
je cherche à génerer un fichier .dll a partir d'un programme c pour le mettre dans mon programme java.
c'est la premiere fois où j'utilise visual c++.
j'ai crée 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 vous avez une ideé ?
merci
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 10 déc. 2007 à 11:45
Tu n'aurais pas un dossier "Debug" ou "Release" de créé?
Normalement, si il n'y a pas eu de probleme de compilation/linkage, la dll devrait se trouver dans un de ces répertoires.
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 10 déc. 2007 à 12:03
si j'ai bien le dossier Debug qui est crée main je n'ai pas la dll dedans.
je trouve dans ce dossier : buildLog.html, TestRapi.obj, vc80.idb et cv80.pdb
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 10 déc. 2007 à 14:37
non
sur le fichier build.xml, j'ai ecrie ça pour avoir le fichier Test.h
*****************
<target name="PDA" >
<javah classpath="./build/web/........." verbose="yes" force="yes">
<class name="Test"></class>
</javah>
</target>
**************************************
j'ai eu ce ficher sans erreur affichée :
*****************************************
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */
#ifdef __cplusplus
}
#endif
#endif
****************************************************
j'ai copié ce fichier dans le répertoire Header Files du projet c
dans le repertoire source files j'ai crée le ficher TestRapi.c
*****************************************
#include "Test.h"
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
return TRUE;
}
JNIEXPORT int JNICALL Java_Test_CeRapiInit (JNIEnv *env, jobject jtest) {
return CeRapiInit();
}
*************************************************
aprés la compilation j'ai les 2 warnings :
warning C4142: benign redefinition of type
warning C4013: 'CeRapiInit' undefined; assuming extern returning int
et je ne trouve pas le fichier .dll
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 10 déc. 2007 à 18:35
OK, c'est bien ce qu'il me semblait, il y a une erreur de linkage.
Il ne trove pas ta fonction CeRapiInit.
Essaie en ne la mettant pas, tu devrais avoir ta dll.
Apres, il faut que tu trouves la libraire dans laquelle ta fonction se situe et que tu la lies à ton projet.
// return 1;
return CeRapiInit();
}
*******************************************************
Si je mets return 1 au lieu de return CeRapiInit(); j'ai pas d'erreur de compilation
et j'ai bien mon fichier NomProjet.dll.
la fonction CeRapiInit() se trouve dans une librairie rapi.dll.
Je ne sais pas comment la liée a mon projet ?
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 10 déc. 2007 à 22:56
Essaie de trouver le fichier rapi.lib.
Mets le dans le répertoire de ton projet, puis dans ton code source, ecrit la ligne suivant:
#pragma comment(lib, "rapi.lib")
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 11 déc. 2007 à 09:17
salut,
rapi.dll c'est une librairie qui est installée dans le dossier system32 par activSync (un
logicuel qui fait la synchronisation entre pc et pda). j'ai cherché dans tous les dossier
mais je n'ai pas trouvé rapi.lib.
je ne sais pas comment faire?
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 11 déc. 2007 à 11:57
Je crois avoir deja lu des problemes simialires au tien.
La librairie rapi.lib n'est pas inclue lors de l'install de VS2005 et ActiveSync, il faut aller la chercher dans un SDK de Windows Mobile.
<hr size= "2" width="100%" />ActiveSync—This is a Win32 (native) component and is responsible for
copying files from your desktop/computer to your device and vice versa.
The component makes extensive use of the RAPI library, which
can be found in the installation folder of the Windows Mobile 5.0
Pocket PC SDK. The same can be downloaded from the =83a52af2-f524-4ec5-9155-717cbe5d25ed&DisplayLang=en Windows Mobile Web site.
<hr size="2" width="100%" />
AGILiCOMSavon
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 11 déc. 2007 à 14:17
salut,
Dans le dossier C:\Program Files\Microsoft Platform SDK\Lib j'ai trouvé le fichier :
Mprapi.lib et pas rapi.lib.
est ce que c'est le bon fichier ?
merci
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 11 déc. 2007 à 14:38
Non, je ne crois pas.
Tu as téléchargé le SDK de Windows Mobile 5?
J'ai regardé rapidement, et il semble que rapi.ll ne se trouve que dans ce SDK. Un peu gros c'est vrai, mais bon...
cs_lak75
Messages postés71Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 avril 2008 11 déc. 2007 à 15:37
salut,
j'ai préféré de commencer par un exemple simple sans passé par la librairie rapi.dll.
pour ce la, j'ai défini une classe Test.java :
**********************************************
public class Test
{
static {System.loadLibrary("Projet"); }
public native int coucou();
public Test(){}
}
***********************************************
a partir de cette classe je génere un fichier Test.h :
*********************************************
#include <jni.h>
#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif
******************************************************
avec visual c++ j'ai crée un Projet que j'ai nommé "Projet"
j'ai un programme Test.c
****************************************
#include "Test.h"
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
return TRUE;
}
JNIEXPORT jint JNICALL Java_Test_CeRapiInit (JNIEnv *env, jobject jtest) {
//je retourne une valeur egal à 1
return 1;
}
************************************************************
en fin dans mon programme java, j'appele la methode coucou:
Test obj = new Test();
int c = obj.coucou();
et là il m'affiche cette erreur :
ERROR : java.lang.UnsatisfieldLinkError : coucou
je ne comprend pas, alors que l'exemple est simple, est ce que tu as une idée?