Réponse acceptée !
Bon je pars du principe que tu as compris comment fonctionne le JNI donc je ne reviendrai pas dessus :D
-----------------------------------------------------------------
voici le code java
public class Test {
static{
System.loadLibrary("JWin");//librairie contenant le wrapper JNI
}
public static native String getEnvironementvariable(String name);
public static void main(String [] args){
System.out.println(getEnvironementvariable("path"));
}
}
-----------------------------------------------------------------
fichier header
/* 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: getEnvironementvariable
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Test_getEnvironementvariable
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif
-----------------------------------------------------------------
fichier cpp
#include "Test.h"
#include <string>
using namespace std;//pour eviter de devoir taper std::string
//je code sous linux donc ca evite les erreurs inutile
#ifdef WIN32
#include <windows.h>
bool WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
return TRUE;
}
#endif
#define BUFF_SIZE 500 //je prevois peut etre large mais bon
JNIEXPORT jstring JNICALL Java_Test_getEnvironementvariable(JNIEnv *env, jclass jcls, jstring jname){
#ifndef WIN32
return NULL;
#endif
string c_string;//pour recevoir la chaine java
jboolean isCopy;//pour tester si la copie de la chaine java vers C s'est bioen passée
char *buff = new char[BUFF_SIZE]; //chaine C qui va contenir le resultat de GetEnv
buff[0] = 0;//on initialise la chaine a zero
//on passe le string java en string C
c_string = env->GetStringUTFChars(jname, &isCopy);
if(env->ExceptionOccurred()){//test si on a pas declanche une exception
env->ExceptionDescribe();//si oui on l'affiche
env->ExceptionClear();//on release la stack d'exception
return NULL;//pas la peine de continuer
}
//recuperation des variables associees a celle passe en parametre
GetEnvironmentVariable(c_string.c_str() , buff , BUFF_SIZE);
if(isCopy == JNI_TRUE)//si la copie s'est bien passée alors on relache la chaine
env->ReleaseStringUTFChars(jname, c_string.c_str());
jstring jret = env->NewStringUTF(buff);
if(env->ExceptionOccurred()){//test si on a pas declanche une exception
env->ExceptionDescribe();//si oui on l'affiche
env->ExceptionClear();//on release la stack d'exception
return NULL;//pas la peine de continuer
}
//on release le tab en C
delete [] buff;
//on retourn la chaine java contenant le result de la recherche
return jret;
}
voila tu creer un DLL qui porte le nom JWin (sinon pense à modifier le
nom dans le code java), tu la met a coté de ton .class et tu run le le
code java(j'ai testé ça fonctionne).
voilou voilou

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