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):
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 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 main:
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); }
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..
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)
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
Partager