Creation dll (JNI) [Résolu]

Signaler
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
Messages postés
50
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
7 août 2012
-
Bonjour a tous.
J'ai un gros soucis de compilation:
je vien de me mettre au JNI. j'ai creer deux fichier (HelloWorld.h et HelloWorld.c). je n'arrive pas a obtenir de dll a partir de ces deux dernier.
Voila les codes:
Partie JAVA
public class HelloWorld {
 public native void displayHelloWorld()
 static {
    System.loadLibrary("hello");
 }
 public static void main(String[] args) {
    new HelloWorld().displayHelloWorld();
 }
}

Fichier header (.h) generer par "javah"
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */



#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);



#ifdef __cplusplus
}
#endif
#endif

Fichier c
//#include <StubPreamble.h>
#include "HelloWorld.h"
#include <stdio.h>



void HelloWorld_displayHelloWorld(struct HHelloWorld *this) {
    printf("Hello World!\n");
    return;
}


Merci de votre aide.

8 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Il faut que tu définis certains flags de compilation.

Ceci est un cours fabuleux il montre comment démarrer avec JNI en utilisant DevC++.

http://www.dil.univ-mrs.fr/~garreta/JavaMINT/divers/SurJNI.html

Bonne chance.


________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
Messages postés
5360
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
25 janvier 2021
108
Salut,

faut aussi mettre les repertoires
<jdk>/include
<jdk>/include/<os name>

dans le path include de ton ide (ou directement dans la ligne de compilation) pour que ton compilo puisse trouver la référence sur le fichier jni.h

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5360
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
25 janvier 2021
108
Salut,

déjà pour creer une dll sous windows il faut un main, ensuite tu ne defini pas la méthode du header donc ça rique pas de fonctionner

Fichier c
//#include <StubPreamble.h>
#include "HelloWorld.h"
#include <stdio.h>

#ifdef WIN32
    #include <window.h>
   
    bool WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
        return TRUE;
    }
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld  (JNIEnv *env, jobject obj){
    printf("Hello World!\n");
    return;
}

tu sais pour faire du jni faut au minimum maitriser les bases du C/C++ ensuite je te suggère de lire le tutos de sun sur JNI (ICI)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5360
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
25 janvier 2021
108
Salut,

j'ai oublié dans le fichier C le return de la méthde display ne sert à rien.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Bon mon ami, je te conseille d'utiliser DevC++ c'est graduit.

De plus la création d'une DLL avec cet IDE est simple.

________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
Bonjour.
merci pour la "correction", je l'avais pas vu; ainsi que pour le tuto.
L'IDE que j'utilise est Dev c++. Seulement, il m'indique une erreur au niveau de #include "HelloWorld.h"

merci.
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
merci.
ca marche.
Messages postés
50
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
7 août 2012

Salut,
Je suis dans la merde les gars avec JNI. Pour moi, déjà le code de génération me pose problème, voici la ligne de commande DOS:
cl -Im:C:\java\jdk1.6.0_24\include -Im:C:\java\jdk1.6.0_24\include\win32 -LD HelloWorld.cpp -FeHelloWorldImp.dll;
J'ai comme message d'erreur:
<<'cl' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier commande>>
Que faut-il faire?