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 );
 
}
}