Récupération des fonctions d'un dll avec JNA

tamtam12 Messages postés 1 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011 - 17 mars 2011 à 12:22
kamalkane Messages postés 11 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 - 20 mars 2013 à 17:20
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):
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:

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:

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

1 réponse

kamalkane Messages postés 11 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 20 mars 2013
20 mars 2013 à 17:20
Bonjour, moi aussi j'ai un dll écrit en C++ dont je voudrai récupérer en java avec l'API JNA.
Si vous pouvez m'aider sur la manière dont on les récupèrent.
0
Rejoignez-nous