Bonjour,
Je souhaite transformer des fonctions qui sont dans un dll inaccessible compilé en C en méthode Java pour les exploiter dans mon programme en java. Pour cela j'utilise le JNA (Java native access), j'ai réussi à extraire quelque méthodes mail j'en ai une qui donne pas le bon résultat qui est la suivante:

My method is (declarée en VB6):
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
Declare Function rsiGetLastTemplate Lib "rsidll32" ( ByVal chnl As Long, ByRef tmpl As RSI_LAST_TEMPLATE) As Long
 
avec la structure:
Type RSI_LAST_TEMPLATE
    score As RSI_SCORE
    templateVector As RSI_TEMPLATE
End Type
 
RSI_SCORE et RSI_TEMPLATE sont aussi deux structures :
Type RSI_SCORE
    score As Integer
End Type
 
Type RSI_TEMPLATE
    template(0 To RSI_LEN_TEMPLATE - 1) As Byte
End Type
Dans mon programme Java j'ai codé comme suit:

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
public interface JNADemo extends Library {
     JNADemo  INSTANCE = (JNADemo) Native.loadLibrary("rsidll32", JNADemo.class);
 
        public class RSI_SCORE extends Structure{
        public int score;
        }
 
        public class RSI_TEMPLATE extends Structure{
        public int[] template= new int [9];
        }
 
        public class RSI_LAST_TEMPLATE extends Structure {
           public static class ByReference  extends RSI_LAST_TEMPLATE implements Structure.ByReference { }
           public RSI_SCORE Score= new RSI_SCORE();
           public RSI_TEMPLATE templateVector= new RSI_TEMPLATE();
        }
 
public int rsiGetLastTemplate(int mChnl, RSI_LAST_TEMPLATE.ByReference Template);
}
Dans mon main:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
JNADemo rsi= JNADemo.INSTANCE;
 
JNADemo.RSI_LAST_TEMPLATE.ByReference Template = new JNADemo.RSI_LAST_TEMPLATE.ByReference();
 
rsi.rsiGetLastTemplate(chnl, Template);
System.out.println("The Score is = " + Template.Score.score)
Au niveau de la compilation il y a pas des erreurs mais la fonction ne retourne pas la meme valeur retournée quant je l'exécute dans le même programme avec VB. Il y a donc une erreur!! moi je crois que c'est dans les structures..
Est ce que quelqu'un peut m'aider?!
Sinon y a t-il autre moyen d'extraire ces fonction a part JNA et JNI?!!
Merci d'avance