Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JNA] appel fonctions d'une DLL avec syntaxe particulière

    2 mai 2012 à 13:50:08

    Bonjour,

    J'utilise actuellement la librairie JNA afin de pouvoir utiliser une .DLL dans mon projet actuel.

    J'ai donc déclaré les méthodes native avec l'aide de JNAerator, mais lorsque j'utilise certaines fonctions, j'obtiens "La procédure spécifiée est introuvable.".

    Finalement en utilisant DLL Export Viewer je me suis rendu compte que les fonctions avaient pour syntaxe "_maFonction@X" ou "_maFonction@XX".C'est dans ce second cas que l'appel est impossible.

    Est-ce que certains d'entre vous on déjà eu ce genre de soucis ?
    Comment le résoudre ?

    n'hésitez pas à me dire si je ne suis pas clair dans ma question ou qu'un point manque de précision.

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2012 à 21:55:13

      Si tu as accès au code source de la DLL, le mieux est de la recompiler en précisant que tu ne veux pas les suffixes stdcal. Avec GCC, c'est par exemples les options -Wl,--add-stdcall-alias ou -Wl,--kill-at

      Si tu ne peux pas recompiler la DLL, il reste deux solutions :

      Si tu utilises l'interface Library, tu peux à la place utiliser l'interface StdcallLibrary. Sauf erreur, ceci a pour effet d'ajouter automatiquement les @n nécessaires quand les méthodes sont liées.

      Si tu utilises la classe Native et les méthodes du type register pour faire un lien direct avec ta classe, alors il existe une interface supplémentaire à implémenter qui ajoute une méthode permettant de faire le mapping. Je ne sais plus le nom de cette interface, mais c'est quelque chose dans le genre FunctionMapper ou MethodMapper.
      • Partager sur Facebook
      • Partager sur Twitter

      [JNA] appel fonctions d'une DLL avec syntaxe particulière

      × 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