IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[JNI]Dll déjà existante et JNI


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut [JNI]Dll déjà existante et JNI
    Bonjour,
    Je débute dans l'utilisation de JNI, de plus ca fais 2 ans que j'ai plus fais de java :/
    J'ai tenté de suivre les tutoriaux sur JNI pour intégrer des méthodes natives.
    Par exemple tutoriel jmd chap 30 dans les cours et tutoriels pour apprendre Java : http://java.developpez.com/cours/

    A chaque fois on nous montre comment associer une méthode native dans une dll que l'on compile soit même.

    Dans mon cas, je veux utiliser une dll déjà compilée et JE NE DISPOSE PAS DU CODE SOURCE.

    La seule chose que je connaisse de la dll ce sont les noms des méthodes natives et le typage de leurs paramètres.

    MES QUESTIONS.
    Est-ce qu'il faut que je crée une nouvelle dll qui fera l'interface ? Ou puis je utiliser directement la dll ? Si je peux l'utiliser directement, comme faire ?
    Je débute avec éclipse : existe-t-il dans ce logiciel des assistants qui pourraient faciliter l'intégration de cette dll ?

    Merci de me répondre.

    Le nom de la dll est sgdw32.dll
    Je dispose de sgd.h fourni avec la dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    /*
     * -------------------------------------------------------------------
     * (c) 2001 GIE SESAM-VITALE
     *
     * PROJET   : Services de Gestion de Donnees
     *
     * FICHIER  : sgd.h (v5)
     *
     * Declaration des prototypes des fonctions SGD pour les progiciels.
     * -------------------------------------------------------------------
     */
     
    #ifndef __SGD_H__
    #define __SGD_H__
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
     
    /*
     * Inclusions
     */
    #include <stddef.h>
    /* Inclure le fichier de déclarations spécifiques système :
       win32def.h, macosdef.h, unixdef.h, etc. */
     
     
    /* Reservation d'un session d'echange. */
    typedef unsigned short (API_ENTRY TFCTSGDRESERVER)
                           (size_t          Taille,
                            unsigned short* NumeroSession);
    extern TFCTSGDRESERVER SGD_ReserverSession;
     
    /* Redimensionnement d'une zone d'entree interne. */
    typedef unsigned short (API_ENTRY TFCTSGDREDIMENSIONNER)
                           (unsigned short NumeroSession,
                            size_t         NouvelleTaille);
    extern TFCTSGDREDIMENSIONNER SGD_RedimensionnerBuffer;
     
    /* Liberation d'une session d'echange. */
    typedef unsigned short (API_ENTRY TFCTSGDLIBERER)
                           (unsigned short NumeroSession);
    extern TFCTSGDLIBERER SGD_LibererSession;
     
    /* Ajout d'un groupe. */
    typedef unsigned short (API_ENTRY TFCTSGDAJOUTERGROUPE)
                           (unsigned short NumeroSession,
                            unsigned short IdGroupe);
    extern TFCTSGDAJOUTERGROUPE SGD_AjouterGroupe;
     
    /* Ajout d'un champ. */
    typedef unsigned short (API_ENTRY TFCTSGDAJOUTERCHAMP)
                           (unsigned short NumeroSession,
                            const char*    ValeurChamp);
    extern TFCTSGDAJOUTERCHAMP SGD_AjouterChamp;
     
    /* Ajout d'un champ d'octets. */
    typedef unsigned short (API_ENTRY TFCTSGDAJOUTERBIN)
                           (unsigned short NumeroSession,
                            const char*    ValeurChamp,
                            size_t         TailleChamp);
    extern TFCTSGDAJOUTERBIN SGD_AjouterChampBin;
     
    /* Ajout d'un champ d'octets d'un Fichier. */
    typedef unsigned short (API_ENTRY TFCTSGDAJOUTERFICHIER)
                           (unsigned short NumeroSession,
                            const char*    NomFichier);
    extern TFCTSGDAJOUTERFICHIER SGD_AjouterChampFichier;
     
    /* Lecture du numero du groupe suivant. */
    typedef unsigned short (API_ENTRY TFCTSGDLIREGROUPE)
                           (unsigned short  NumeroSession,
                            unsigned short  IdGroupeCourant,
                            unsigned short  OccurrenceGroupeCourant,
                            unsigned short* IdGroupeSuivant,
                            unsigned short* OccurrenceGroupeSuivant);
    extern TFCTSGDLIREGROUPE SGD_LireGroupeSuivant;
     
    /* Lecture d'un champ. */
    typedef unsigned short (API_ENTRY TFCTSGDLIRECHAMP)
                           (unsigned short NumeroSession,
                            unsigned short IdGroupe,
                            unsigned short OccurrenceGroupe,
                            unsigned short NumeroChamp,
                            char*          ValeurChamp,
                            size_t*        TailleMax);
    extern TFCTSGDLIRECHAMP SGD_LireChamp;
     
    /* Lecture d'un champ d'octets. */
    typedef unsigned short (API_ENTRY TFCTSGDLIREBIN)
                           (unsigned short NumeroSession,
                            unsigned short IdGroupe,
                            unsigned short OccurrenceGroupe,
                            unsigned short NumeroChamp,
                            char*          ValeurChamp,
                            size_t*        TailleMax);
    extern TFCTSGDLIREBIN SGD_LireChampBin;
     
    /* Lecture d'un champ vers un fichier. */
    typedef unsigned short (API_ENTRY TFCTSGDLIREFICHIER)
                           (unsigned short NumeroSession,
                            unsigned short IdGroupe,
                            unsigned short OccurrenceGroupe,
                            unsigned short NumeroChamp,
                            const char*    NomFichier);
    extern TFCTSGDLIREFICHIER SGD_LireChampFichier;
     
    /* Activation de la trace. */
    typedef unsigned short (API_ENTRY TFCTSGDINITTRACE)
                           (const char*    NomFichier,
                            const char*    ModeOuverture,
                            unsigned short Module,
                            unsigned char  Niveau);
    extern TFCTSGDINITTRACE SGD_InitTrace;
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif
    Je dispose aussi de "sgdw32.lib" (je sais pas trop a quoi cela pourrai bien servir … )

    Le code de ma classe ressemble à çà. je n'ai pour le moment qu'une methode native déclarée pour les test

    le descriptif de cette methode est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type de retour         identifiant de la fonction           paramètres
    unsigned short            SGD_ReserverSession            ( size_t Taille,                                                               unsigned short* NumeroSession);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class Sgd {
    // liaison avec la librairie dynamique
    static {
    System.loadLibrary("sgdw32");
    }
     
    // methode native
    public static native short SGD_reserverSession (int taille , short numerosession ) ;
     
    // programme principal
    public static void main(String args[]) {
     
    System.out.print("test");
    int entier =10000 ;
    int noSession =0 ;
    int codeRetour = -1;
     
    // appel de la methode native avec parametres
    codeRetour = Sgd.SGD_reserverSession ( entier , noSession );
    // affichage du résultat
    System.out.println( codeRetour );
     
    }
    }

  2. #2
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    hello,
    tu ne pourras pas utiliser la dll telle quel...tu vas devoir, comme tu le dis, passer par une dll "interface" qui contiendra les méthodes avec les signatures "JNI" que tu pourras appeller de java...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par bidi
    hello,
    tu ne pourras pas utiliser la dll telle quel...tu vas devoir, comme tu le dis, passer par une dll "interface" qui contiendra les méthodes avec les signatures "JNI" que tu pourras appeller de java...
    franchement cela m'etonne de devoir créer une nouvelle dll. En plus sgdw32.dll est déjà une dll d'interface..... (une dll d'interface à une dll d'interface => vous voyez le bin's)

    quelqu'un peut confirmer que j'ai bien à creer une nouvelle dll. merci d'avance

  4. #4
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    c toi qui vois ;-p

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par bidi
    c toi qui vois ;-p
    c'est comme avec les medecins : 2 avis valent mieux qu'un

    pour le moment je prend ta solution et je créée une nouvelle dll. Mais si il y a mieux je suis preneur.

  6. #6
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    Bon :-)
    Pour être plus clair, JNI ne peut pas utiliser des dll telle quelle, si tu regarde dans un tutoriel, tu verras qu'il y a des types propres à utiliser genre jint,... et des mots clefs genre JNIExport pour déclarer une fonction JNI. Tous ces mots clefs ne sont evidement pas présents dans une DLL "normale", c'est pourquoi tu devras écrire une sorte de "bridge" entre ta dll et ton prog java... Je l'ai déjà fait pour utiliser une librairie d'imagerie médicale, c t un cas concret assez proche du tiens ;-)

  7. #7
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    voici un extrait de "penser en java" pour t'en convaincre totalement ;-)
    La façon la plus simple d'implémenter des méthodes JNI natives est de commencer à écrire des prototypes de méthodes natives dans une classe Java, de compiler cette classe, et exécuter le fichier .class avec javah. Mais si on possède une large base de code préexistante qu'on désire appeler depuis Java ? Renommer toutes les fonctions de notre DLL pour les faire correspondre aux conventions du JNI name mangling n'est pas une solution viable. La meilleure approche est d'écrire une DLL d'encapsulation "à l'extérieur" de votre base de code d'origine. Le code Java appelle des fonctions de cette nouvelle DLL, qui à son tour appelle les fonctions de votre DLL d'origine. Cette solution n'est pas uniquement un contournement ; dans la plupart des cas on doit le faire de toutes façons parce qu'on doit appeler des fonctions JNI sur les références des objets avant de pouvoir les utiliser.
    Et, tu as bien raison, un avis vaut mieux qu'un ;-) mais comme j'étais en formation, je ne savais pas faire long comme réponse ;-p et là, comme c la pause :-D

  8. #8
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Et, tu as bien raison, [b]un[/b] avis vaut mieux qu'un
    ça par contre ça doit être ce que j'ai bu à midi

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par bidi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Et, tu as bien raison, [b]un[/b] avis vaut mieux qu'un
    ça par contre ça doit être ce que j'ai bu à midi
    Effectivement ..., c'était la balise [quote] qu'il fallait utiliser, pas la balise [code]

  10. #10
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    mdr :-)

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    bon je vais tenter ce soir la création de la dll "sgdinterface"

    qui sera ...... l'interface de sgdw32.dll

    pour faire la compilation de cette dll j'ai juste besoin du fichier issu de la commande javah et du fichier sgd.h ?

    dois je redéclarer quelque chose d'autre ? ou je doit aussi faire des incantations vodou ?

    j'avoue que là ca va etre galère pour moi donc si vous avez un conseil sur les pièges à eviter ca m'arrangerai bien d'etre informé avant.

  12. #12
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Salut,

    Citation Envoyé par Yennick
    pour faire la compilation de cette dll j'ai juste besoin du fichier issu de la commande javah et du fichier sgd.h ?

    dois je redéclarer quelque chose d'autre ? ou je doit aussi faire des incantations vodou ?

    j'avoue que là ca va etre galère pour moi donc si vous avez un conseil sur les pièges à eviter ca m'arrangerai bien d'etre informé avant.
    Un conseil, oui: évite le vaudou, ça marche pas avec Java!

    Non, si tu suis le tutoriel de JM Doudoux, tu devrais y arriver sans trop de soucis. Fais ta classe en prévoyant les méthodes pour interfacer avec ta dll, tu lances ça dans javah, tu récupères le fichier d'entête qu'il te crée, et tu fais ta dll avec les bons nom de fonctions. Il faudra peut-être faire gaffe sur les types des paramètres, mais bon, en cas de soucis, on est là!

    Bon courage!

    Petite question: tu as regardé si il n'existait pas déjà un binding java pour ta dll?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par plegat

    Petite question: tu as regardé si il n'existait pas déjà un binding java pour ta dll?
    c'te bonne blague ... comme c'est une dll fournie par les services infos de la cpam ca doit exister, mais le gars en aura tellement chié qu'il gardera sa soluce jalousement (concurrence oblige )
    merci pour les conseils je vais regarder ca de façon un peu plus poussée

  14. #14
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Points : 609
    Points
    609
    Par défaut
    Je n'y connais rien en C, mais si je me souviens les .lib sont des bibliotheques statiques, qui sont compilée dans le programme... Est-ce possible de compiler une dll avec un .lib? dans ce cas la tu aura une et une seule dll

    Enfin jdis sa jdis rien

    bon courage[/img]

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    bon je ne m'en sort pas.

    j'ai fait plusieurs essais concernant la création de dll et les exemples sont bien compris.

    par contre ce qui est d'interfacer une methode java avec une méthode contenue dans la dll originale => ca merdoie à la compilation c de TestJNI.c

    In file included from TestJNI.c:4:
    H:/workspace_Eclipse/TestJNI/sgd.h:29: parse error before "TFCTSGDINITTRACE"
    H:/workspace_Eclipse/TestJNI/sgd.h:34: parse error before "SGD_InitTrace"
    H:/workspace_Eclipse/TestJNI/sgd.h:34: warning: data definition has no type or s
    torage class
    TestJNI.c: In function `Java_TestJNI_jSGD_InitTrace':
    TestJNI.c:10: called object is not a function
    je ne comprend pas les erreurs qui proviennent des lignes de sgd.h
    De plus j'ai l'impression que l'appel de la fonction SGD_InitTrace est très mal fait (forcemment je suis une buse en c....). Il manque certainement la déclaration de la dll sgdw32.dll

    quelqu'un peut m'aider. une fois que j'aurai bien compris le pricipe pour une fonction j'arriverai pour le rete mais là, ca commence à etre galère...

    j'ai codé le fichier TestJNI.c tel que (il est à noté que la fonction initiale SGD_InitTrace comporte des paramètres que j'ai volontairement passé en dur => (const char* NomFichier, const char* ModeOuverture, unsigned short Module, unsigned char Niveau);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <jni.h> 
    #include <stdio.h> 
    #include <TestJNI.h> 
    #include <sgd.h> 
     
    JNIEXPORT jint JNICALL 
    Java_TestJNI_jSGD_InitTrace(JNIEnv *env, jobject obj) 
    { 
      printf(" InitTrace_SGD\n "); 
      return SGD_InitTrace( "testJNITrace.txt" , "wa" , 6 , 3 ); 
    }

    je récapitule
    mon fichier TestJNI.java se compile bien en classe java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class TestJNI {
    	static {
    		System.loadLibrary("mabibjni");
    	}
     
    	public native int jSGD_InitTrace();
     
    	public static void main(String[] args) {
    		TestJNI maclasse = new TestJNI();
    		System.out.println(maclasse.jSGD_InitTrace());
    	}
    }
    le fichier TestJNI.h est correctement créé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class TestJNI */
     
    #ifndef _Included_TestJNI
    #define _Included_TestJNI
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     TestJNI
     * Method:    jSGD_InitTrace
     * Signature: ()I
     */
    JNIEXPORT jint JNICALL Java_TestJNI_jSGD_1InitTrace
      (JNIEnv *, jobject);
     
    #ifdef __cplusplus
    }
    #endif
    #endif
    j'ai modifié le fichier sgd.h pour qu'il ne reste qu'une seule définition de méthode de la dll sgdw32.dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    /*
     * -------------------------------------------------------------------
     * (c) 2001 GIE SESAM-VITALE
     *
     * PROJET   : Services de Gestion de Donnees
     *
     * FICHIER  : sgd.h (v5)
     *
     * Declaration des prototypes des fonctions SGD pour les progiciels.
     * -------------------------------------------------------------------
     */
     
    #ifndef __SGD_H__
    #define __SGD_H__
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
     
    /*
     * Inclusions
     */
    #include <stddef.h>
    /* Inclure le fichier de déclarations spécifiques système :
       win32def.h, macosdef.h, unixdef.h, etc. */
     
    /* Activation de la trace. */
    typedef unsigned short (API_ENTRY TFCTSGDINITTRACE)
                           (const char*    NomFichier,
                            const char*    ModeOuverture,
                            unsigned short Module,
                            unsigned char  Niveau);
    extern TFCTSGDINITTRACE SGD_InitTrace;
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif
    j'ai créé un fichier TestJNI.def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EXPORTS
    Java_TestJNI_jSGD_InitTrace

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    up

    Des idées ???

    ce serait vraiment sympas si vous savez répondre de me dire comment faire (surtout qu'en plus le sujet de mon travail n'est pas de jouer avec JNI mais de faires des classes fonctionnelles propres dans un vrai langage orienté objet )

    Merci d'avance

  17. #17
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut Re: [JNI]Dll déjà existante et JNI
    Il y a ça au début du fichier sgd.h, dans la partie "inclusions"... tu as rajouté celui qu'il fallait pour ton système?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* Inclure le fichier de déclarations spécifiques système :
       win32def.h, macosdef.h, unixdef.h, etc. */

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    merci plegat d'avoir relevé cet oubli. => TestJNI.c compile et je peux générer un fichier TestJNI.o
    Il reste que quand je tente de creer une dll j'ai cette erreur de compilation

    H:\workspace_Eclipse\TestJNI>gcc -shared -I "C:\Sun\AppServer\jdk\include" -I "C
    :\Sun\AppServer\jdk\include\win32" -I "H:\workspace_Eclipse\TestJNI" -I "c:\win
    dows" -o mabibjni.dll TestJNI.c TestJNI.def
    Warning: resolving _Java_TestJNI_jSGD_InitTrace by linking to _Java_TestJNI_jSGD
    _InitTrace@8
    Use --enable-stdcall-fixup to disable these warnings
    Use --disable-stdcall-fixup to disable these fixups
    C:\DOCUME~1\Kubiac\LOCALS~1\Temp/cc4kdaaa.o(.text+0x4a):TestJNI.c: undefined ref
    erence to `SGD_InitTrace@16'
    merci de me dire comment faire reference à la dll sgdw32.dll pour la fonction SGD_InitTrace

  19. #19
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Tu n'as pas récupéré un fichier libsgdw32.a ou quelque chose de ressemblant avec ta dll et le fichier *.h?

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par plegat
    Tu n'as pas récupéré un fichier libsgdw32.a ou quelque chose de ressemblant avec ta dll et le fichier *.h?
    dans le package fourni par le il y a sgd.h , sgdw32.dll et sgdw32.lib c'est tout

Discussions similaires

  1. [JNI]dll java
    Par icepower dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 03/09/2009, 15h53
  2. JNI, dll et CLASSPATH
    Par Trap D dans le forum NetBeans
    Réponses: 7
    Dernier message: 26/08/2007, 11h01
  3. JNI, Dll, Linux, So
    Par ghyslain-osiris dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 07/05/2007, 15h34
  4. JNI/DLL - Extern C : Généralisation ?
    Par ni0urk dans le forum MFC
    Réponses: 1
    Dernier message: 19/01/2006, 09h27
  5. Accès dll depuis java avec JNI
    Par romano21 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 25/10/2005, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo