Problème d'exécution d'une fonction dans un fichier .dll sous java
JPrginfo
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
JPrginfo Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
JPrginfo Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'essayé de communiquer avec une Carte I/O depuis un programme JAVA par un intermédiaire de fichier Dii.dll
dans ce fichier il y a plusieurs fonctions ce qui m'intéresse est 5 fonctions :
1._DiiGetDevs@4 //avec un argument en paramètre
2._DiiEnumDevs@16 //avec 4 arguments en paramètre les 2 dernier pointeur par Ref
3._DiiOpenDevice@12 //avec 3 arguments en paramètre
4._DiiSetDigitalByte@12
5._DiiSetDigitalBit@12
JNative.setLoggingEnabled(true); //pour voire ce qui ce passe dans la dll.
Pour la premier j'utilise le code suivant :
-------------------------------------------------------
ca marche bien le retour est 1.
---------------------------------------------------------
pour la deuxième :
return DiiEnumDevs.getRetValAsInt();
ca marche le retour est 1 mais un message dans la console :
[DEBUG] [org.xvolks.jnative.JNative] [loadLibrary]: Using cached handle 1879965696 for function '_DiiEnumDevs@16' in library 'Dii'
-------------------------------------------------------------------------------------------------------
pour la troisième :
ca marche pas le retour est -1 avec le même debug que la deuxième fonction.
est ce que quelqu'un a une piste que je peut suivre cachant qu'avec le code VB que le fournisseur de la carte a fournit ca marche très bien.
voici le lien du fournisseur vous pouvez trouvez le code en VB et VC.
https://www.smatlab.com/code/code10.html
https://www.smatlab.com/
Merci pour votre aide
j'essayé de communiquer avec une Carte I/O depuis un programme JAVA par un intermédiaire de fichier Dii.dll
dans ce fichier il y a plusieurs fonctions ce qui m'intéresse est 5 fonctions :
1._DiiGetDevs@4 //avec un argument en paramètre
2._DiiEnumDevs@16 //avec 4 arguments en paramètre les 2 dernier pointeur par Ref
3._DiiOpenDevice@12 //avec 3 arguments en paramètre
4._DiiSetDigitalByte@12
5._DiiSetDigitalBit@12
JNative.setLoggingEnabled(true); //pour voire ce qui ce passe dans la dll.
Pour la premier j'utilise le code suivant :
-------------------------------------------------------
JNative DiiGetDevs = new JNative("Dii","_DiiGetDevs@4"); DiiGetDevs.setRetVal(Type.INT); DiiGetDevs.setParameter(0,515); DiiGetDevs.invoke(); return DiiGetDevs.getRetValAsInt();
ca marche bien le retour est 1.
---------------------------------------------------------
pour la deuxième :
Pointer P_id = new Pointer(new HeapMemoryBlock(12)); Pointer P_token = new Pointer(new HeapMemoryBlock(16)); JNative DiiEnumDevs = new JNative("Dii","_DiiEnumDevs@16"); DiiEnumDevs.setRetVal(Type.INT); DiiEnumDevs.setParameter(0,515); DiiEnumDevs.setParameter(1,0); DiiEnumDevs.setParameter(2,P_id); DiiEnumDevs.setParameter(3,P_token); DiiEnumDevs.invoke();
return DiiEnumDevs.getRetValAsInt();
ca marche le retour est 1 mais un message dans la console :
[DEBUG] [org.xvolks.jnative.JNative] [loadLibrary]: Using cached handle 1879965696 for function '_DiiEnumDevs@16' in library 'Dii'
-------------------------------------------------------------------------------------------------------
pour la troisième :
JNative DiiOpenDevs = new JNative("Dii","_DiiOpenDevice@12"); DiiOpenDevs .setRetVal(Type.INT); DiiOpenDevs .setParameter(0, P_token);//le pointeur dans la 2 em fonction DiiOpenDevs .setParameter(1, 515); DiiOpenDevs .setParameter(2, "true")// ce parametre est boolean dans la fonction dll mais au import de org.xvolks.jnative setParameter n'a pas d'argument boolean c pour ca je fais true en string et aussi "1" en enitier. DiiOpenDevs.invoke(); retunr DiiOpenDevs.getRetValAsInt();
ca marche pas le retour est -1 avec le même debug que la deuxième fonction.
est ce que quelqu'un a une piste que je peut suivre cachant qu'avec le code VB que le fournisseur de la carte a fournit ca marche très bien.
voici le lien du fournisseur vous pouvez trouvez le code en VB et VC.
https://www.smatlab.com/code/code10.html
https://www.smatlab.com/
Merci pour votre aide
Configuration: Windows / Chrome 85.0.4183.102
A voir également:
- Problème d'exécution d'une fonction dans un fichier .dll sous java
- Fichier bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
2 réponses
Bonjour,
Je ne connais pas JNative, mais un truc qui me paraît très suspect, c'est le booléen transmis comme chaîne de caractère... Tu es sûr de ton coup ? Tu as un exemple où ça marche ?
Sinon, pour le message de debug, je ne m'inquièterais pas outre mesure. Il ne dit pas qu'il y a un problème, il donne juste une information que le développeur pourrait juger utile, à savoir que comme il a déjà chargé cette dll, il réutilise un pointeur précédemment établi, c'est tout.
Xavier
Je ne connais pas JNative, mais un truc qui me paraît très suspect, c'est le booléen transmis comme chaîne de caractère... Tu es sûr de ton coup ? Tu as un exemple où ça marche ?
Sinon, pour le message de debug, je ne m'inquièterais pas outre mesure. Il ne dit pas qu'il y a un problème, il donne juste une information que le développeur pourrait juger utile, à savoir que comme il a déjà chargé cette dll, il réutilise un pointeur précédemment établi, c'est tout.
Xavier
merci pour votre réponse,
justement je sais mais la biblio de org.xvolks.jnative n'a pas d'argument boolean sauf INT,String,VOID,Long alors je fait "true" en String at aussi 1 en int.
mais le debug a lieu avant ca ,c dans la deuxième fonction.
justement je sais mais la biblio de org.xvolks.jnative n'a pas d'argument boolean sauf INT,String,VOID,Long alors je fait "true" en String at aussi 1 en int.
mais le debug a lieu avant ca ,c dans la deuxième fonction.