IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Méthode non trouvée dans le DLL


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 27
    Points
    27
    Par défaut Méthode non trouvée dans le DLL
    Bonjour,

    Quelqu'un pourrait m'aider à résoudre mon problème lié au ZKEMKEEPER.dll ?

    J'explique, j'ai ce dll enregistré dans le système et j'arrive à me connecter au device avec l'adresse IP en utilisant cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void Connect() {
        if (Dispatch.call(IService.INSTANCE, "Connect_Net", "172.16.0.122", 4370).toBoolean())
            System.out.println("CONNECTED");
        else
            System.out.println("NOT CONNECTED");
    }
    Le besoin c'est que j'essaye de récupérer le code d'une carte RFID du moment où je la passe sur le lecteur, dans le manuel on dit qu'il faut utiliser l'événement pour le récupérer mais ça me sorte l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "main" com.jacob.com.ComFailException: Can't map name to dispid: OnHIDNum
    	at com.jacob.com.Dispatch.invokev(Native Method)
    	at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
    	at com.jacob.com.Dispatch.callN(Dispatch.java:453)
    	at Fonctionne.Services.OnHIDNum(Services.java:273)
    	at Fonctionne.Example.main(Example.java:26)

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Je ne sais pas si tu vas avoir beaucoup de réponse au vu du nom de cette librairie, je vais de t'aider comme je peux.

    As-tu jeté un coup d'oeil dans la FAQ ? :
    Citation Envoyé par http://danadler.com/jacob/jacobfaq.html
    I’m getting a “ComFailException: Can’t map name to dispid”, what should I do?
    If the exception says “com.jacob.com.ComFailException: Can't map name to dispid”: maybe you’re trying to call method that didn't exist in the library...
    En mode debug, quelle est la ligne de code que tu as écrit lance cette exception ?

    Travailles-tu dans un environnement multi-thread ? j'ai cru comprendre que cette librairie gérait mal les environnements multi-threads.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Bonsoir et merci pour votre réponse,

    J'ai déjà consulté le faq pour cette exception et c'est ce que j'ai compris mais le problème c'est que cette fonction existe dans le manuel de développement qui accompagne le dll !

    La 2ème ligne est celle qui génère l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Variant CardNumber = new Variant();
    Dispatch.call(IService.INSTANCE, "OnHIDNum", CardNumber).toBoolean()
    Je ne suis pas dans un contexte multi-thread.

  4. #4
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Alors j'ai une autre hypothèse : la version de la JVM que tu utilises est une 64bits et ta DLL est adapté à un environnement 32bits (ou inversement). Tu peux exécuter la commande java -version pour connaitre la version de ta JVM.
    Essayes de lancer ton programme avec une JVM 32bits (ou 64bits si tu as une 32bits) pour voir.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Je me suis bien assuré que tout l'environnement est sous la même version (JVM, JDK, Dll 64bits) mais le problème persiste !

    J'ai essayé de décompiler le dll et j'ai réussi à avoir un fichier intitulé CZKEMClass.cs.

    Ce que j'ai pu remarquer c'est que ce fichier contient des méthodes précédées par
    [[DispId(255)]]
    et des événements comme celui que je cherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    public virtual void add_OnHIDNum([In] _IZKEMEvents_OnHIDNumEventHandler obj0);
    En faisant lien avec l'exception que j'ai eu je commence à penser que l'appel que j'effectue n'est pas correcte ! Car OnHIDNum est un événement ne contenant pas un
    dispid
    .
    Y'a t'il une autre manière pour faire cet appel en utilisant JACOB ?

    Capture écran du code et de l'exception :
    Nom : Capture.PNG
Affichages : 309
Taille : 80,2 Ko

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Can't map name to dispid veux juste dire qu'il n'a pas pu convertir ton nom de méthode en un nom complet dans la dll je pense. En l'occurence, tu peux vérifier que le nom de la méthode n'est pas plutot "add_OnHIDNum" ? Aussi, cette méthode accepte visiblement une forme de callback comme paramètre, j'ignore comment on crée des références de méthode en jacob, mais ce n'est pas juste un Variant, faut que ça appelle ton code au final.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Selon la documentation OnHIDNum accepte un seul paramètre qui est le numéro de carte qui va être récupéré par la suite:
    Nom : OnHid.png
Affichages : 308
Taille : 19,6 Ko

    J'ai fait quelques recherches et j'ai trouvé la classe ActiveXDispatchEvents de Jacob mais j'ai pas encore su comment l'utiliser afin de lancer l'événement souhaité

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    j'ai pas la doc sous la main, mais ça, ça m'a l'air d'être la signature que ton listener doit implémenter, pas la signature du code que tu appelle.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Tu peux télécharger la doc depuis ce lien

    J'arrive pas à trouver une solution pour faire l'appel de cet événement

Discussions similaires

  1. EVP_Cipher non trouvé dans libeay32.dll
    Par Julie++ dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 12/10/2008, 20h13
  2. Image dans ressource non trouvée depuis une dll
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 17/08/2007, 15h10
  3. Variable générale non trouvée dans une fonction
    Par mickael.be dans le forum Langage
    Réponses: 10
    Dernier message: 21/02/2006, 19h18
  4. [PHP-JS] Formulaire non trouvé dans une fonction
    Par philippe30 dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2005, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo