Créer une dll a partir du C

cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008 - 7 déc. 2007 à 12:04
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008 - 12 déc. 2007 à 09:17
Salut,
Je cherche a crée une dll a partir d’un programme en c et
pas un exécutable. J’utilise visual c++.

Est-ce que quelqu’un à une idée ?

Merci

28 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
7 déc. 2007 à 13:19
Ben tu crées un projet Dll et pas exe.
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008
7 déc. 2007 à 14:04
oui mais sur visual c++, il ne me donne pas la possibilité de

choisir le type de projet.

est ce que tu sais comment choisir le type ?

merci
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
7 déc. 2007 à 14:08
Quelle version de VS tu utilies? Version express?

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008
7 déc. 2007 à 14:16
oui c'est visual c++ 2500 express edition
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008
7 déc. 2007 à 14:17
excuse visual c++ 2005 Express Edition
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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!

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Derniè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>

 BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
        return TRUE;
    }

JNIEXPORT int JNICALL Java_Test_CeRapiInit (JNIEnv *env, jobject jtest) {
    return CeRapiInit();
}

***********************************************
dans le repertoire Header file j'ai le fichier Test.h

**********************************************
//* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */

#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test
 * Method:    CeRapiInit
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_Test_CeRapiInit
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
*********************************************
 
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
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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.

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Derniè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
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
10 déc. 2007 à 13:05
Es-tu sur de ne pas avoir d'erreurs de compilation ou de linkage?

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Derniè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 */

#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test
 * Method:    CeRapiInit
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_Test_CeRapiInit
  (JNIEnv *, jobject);

#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
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008
10 déc. 2007 à 17:24
salut,

sur visual c++, si je clique sur compile, j'ai aucune erreur mais je

ne trouve pas le fichier dll qui doit etre généré.

Quand j'ai cliqué sur Debug->start without Debugging : j'ai eu cette

erreur : error LNK2019: unresolved external symbol _CeRapiInit referenced in function _Java_Test_CeRapiInit@8

dans le dossier "Debug" j'ai trouve nomProjet.dll.embed.manifest,

nomProjet.dll.embed.manifest.res, nomProjet.dll.intermediate.manifest.

mais je n'ai pas le nomProjet.dll.

que penses tu?
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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.

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 3 avril 2008
10 déc. 2007 à 19:18
salut,
voilà mon programme 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) {
  
   // 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 ?
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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")

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Derniè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?
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Derniè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
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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...

AGILiCOMSavon
0
cs_lak75 Messages postés 71 Date d'inscription vendredi 20 juillet 2007 Statut Membre Derniè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

JNIEXPORT jint JNICALL Java_Test_coucou
  (JNIEnv *, jobject);

#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?

merci
0
Rejoignez-nous