Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'exécution d'une fonction dans une dll

    21 septembre 2020 à 1:26:58

    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 :
    -------------------------------------------------------
    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


    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2020 à 15:58:57

      il semble qu'avec JNA en suivant par exemple l'exemple trouvé ici => https://www.codeproject.com/Questions/625580/calling-dll-function-java

      -
      Edité par umfred 24 septembre 2020 à 15:59:07

      • Partager sur Facebook
      • Partager sur Twitter

      Problème d'exécution d'une fonction dans une dll

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown