begin process at 2012 02 15 14:42:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Système

 > 

API

 > 

acceder a une dll deja presente


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

acceder a une dll deja presente

vendredi 28 juillet 2006 à 08:59:51 | acceder a une dll deja presente

foulla002

salut

j'avais posté un message sur les dll et on m'a repondu gracieusement

je suis arrivé à comprendre il s'agit de quoi exactement surtout que j'ai repris le script que m'a fournis twinuts avec tous ses etapes

mon probleme la est comment acceder a une dll déja existante ca je n'ai pas su le faire

besoin de votre aide

vendredi 28 juillet 2006 à 10:19:18 | Re : acceder a une dll deja presente

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

tu ne peux y acceder sans passer par un wrapper JNI et si elle sont present et que tu n'en est pas l'autreur il faut qu'appartir de ta lib jni tu l'as load (en C/C++) si tu en es l'auteur tu peux encapsuler ton wrapper dedans.

Pour loader une fonction d'une dll sous windows c'est assez simple tu dois connaitre 2 choses
1 son nom
2 la signature de la fonction

exemple dans le code que j'ai posté je désir utiliser la fonction JAWT_GetAWT de la dll jawt.dll
cette fonction à la signature suivante
jboolean -> ce quelle retourne
JAWT_GetAWT -> son nom
JNIEnv* env -> son premier argument
 JAWT* awt -> son deauxieme argument

pour la loader je procède ainsi

//definition d'un type correspondant à la signature de la fonction
typedef jboolean  (JNICALL* lpfnJawtGetAwt)(JNIEnv* env, JAWT* awt);

//creation d'un HMODULE en gros c'est pour y stoquer son instance
HMODULE hjawt = NULL;
//creation d'une variable de type lpfnJawtGetAwt
lpfnJawtGetAwt mJAWT_GetAWT = NULL;

if(hjawt == NULL){
    //chargement de la lib jawt afin de recuperer une reference valide
    //sur la fonction JAW_GetAWT
    hjawt = GetModuleHandle("JAWT.DLL");
    if (hjawt == NULL){//petit test
        cerr << "JAWT.DLL not found" << endl;
        return;
    }
    //récupération de la fonction le '_' en début et le '@8' a la fin c'est que le code est en CPP
    mJAWT_GetAWT = (lpfnJawtGetAwt)GetProcAddress(hjawt,"_JAWT_GetAWT@8");
    if (mJAWT_GetAWT == NULL) {
        cerr << "JAWT_GetAWT function not found" << endl;
        return;
    }

et pour l'utilisation c'est assez simple
JNIEnv *env;
JAWT awt;
...
jboolean result = mJAWT_GetAWT(env, &awt);

/!\ N'oublie pas de relacher la dll qd tu n'en as plus besoin
FreeLibrary(hjawt);
hjawt = NULL;
mJAWT_GetAWT = NULL;


voilou si tu as des dificulté de comprehension je t'encourage vivement d'aller sur cppfrance pour poser ta question sachant que ton problème sort du context java

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

WORA
vendredi 28 juillet 2006 à 10:55:42 | Re : acceder a une dll deja presente

foulla002

salut
si c'est le cas c'est quoi ce que je vient comme programme
public class GetEnv
{
    static public void main(String[] arg)
    {
        System.out.println("PATH = " + getEnv("path"));
        System.out.println("CLASSPATH = " + getEnv("classpath"));
    }

    static String getEnv(String name)
    {
        StringBuffer value = new StringBuffer(128);

        int chars = GetEnvironmentVariable(name, value, value.capacity());

        if (chars == 0)
        {
            return null;
        }

        if (chars >= value.capacity())
        {
            value.ensureCapacity(chars);
            GetEnvironmentVariable(name, value, value.capacity());
        }
        return value.toString();
    }

    /** @dll.import("KERNEL32",auto) */
    static native int GetEnvironmentVariable(String name, StringBuffer buf, int size);
}

je suis totalement confuse là

vendredi 28 juillet 2006 à 11:23:59 | Re : acceder a une dll deja presente

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

que veux tu faire exactement donne moi les info j'essayerai de t'aider au mieux



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

WORA
vendredi 28 juillet 2006 à 11:36:52 | Re : acceder a une dll deja presente

foulla002

je veux au juste acceder à une dll windows avec java voila

merci twinuts de votre aide vous etes un membre genial

vendredi 28 juillet 2006 à 11:37:49 | Re : acceder a une dll deja presente

foulla002

salut
donc ca m'interesse de voir fonctionner les exemples que je vous est presente
vendredi 28 juillet 2006 à 13:12:02 | Re : acceder a une dll deja presente

Twinuts

Membre Club Administrateur CodeS-SourceS
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
vendredi 28 juillet 2006 à 13:29:48 | Re : acceder a une dll deja presente

foulla002

merci twinuts je vais essayer


Cette discussion est classée dans : dll, acceder, deja, presente


Répondre à ce message

Sujets en rapport avec ce message

Acceder à une DLL ecrite en c++ à partire d'une app java [ par logarsalem ] Bonjour à tous, j'ai un fichier DLL ecrit en c++ qui contient des méthodes, Comment je procéde  pour utiliser ces méthodes à partire d'une application probleme de connexion à la BD apres generation de l'executable [ par bazbouza ] salut tous le monde,bon j'ai terminer mon PFE. ( application avec java -NETBEANS- )mon application utilise les packages :1 - jep-3.2.0-trial.jar : pou point d'entrée a DllRegistreServer [ par mariam1987 ] salut, j'ai un pb avec l'ocx ( jacob.dll) que j'ai telecharger a l'adresse http://danadler.com/jacob/j'arrive pas a le faire entre dans la base de reg acceder aux données d'une BD oracle [ par foufi5 ] Bonjour tout le mondeen faite je travaille sur une application avec la technologie j2ee et une base de données oracle je me charge du module statistiq PKCS11 chargement dll-java [ par pougi95 ] Bonjourj ai une dll respectant la norme pkcs11 il fait que je récupère le certificat et la clé pour pouvoir effectuer une signature de PDFsachant que lire string crypte [ par gerudo41 ] Bonjour, Je dois lire un string crypte par une DLL externe dans un fichier INI. Mais le probleme c´est que ce sont des caracteres speciaux de type : Problème pour utiliser une dll avec Eclipse [ par TreCool0 ] Bonjour à tous,J'ai écrit une dll native avec Visual Studio, et j'ai crée un .jar utilisant cette dll, avec l'aide de la JNA. Je souhaite à présent, s Appel d'une dll C++ avec la JNA [ par TreCool0 ] Bonjour à tous,Voilà mon problème : j'ai crée une dll en C++, sous Visual C++ 2008 Express, et j'appelle une fonction de cette DLL dans un petit progr connexion d'une bd [ par mmia ] bonjour,j'ai deja creer ma base de donnée avec easy php et j'ai deja creer mes interfaces avec dreamweaver comment relier les deux§c'est a dire que mo


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,039 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales