Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : acceder a une dll deja presente [ Système / API ] (foulla002)

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é 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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 12,106 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.