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

Interfaçage autre langage Python Discussion :

Utilisation de ctypes [Python 3.X]


Sujet :

Interfaçage autre langage Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Utilisation de ctypes
    Bonjour,

    Après de longues recherches, j'ai pu constater que l'utilisation de fonctions C/C++ en Python grâce à ctypes a fait l'objet de multiples discussions. Pour autant, je ne trouve toujours pas la solution à mon problème.

    Je souhaite utiliser une bibliothèque C++ propriétaire au format dll (nommé exemple.dll pour l'exemple) dans un programme python. Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from ctypes import *
    lib_c = cdll.LoadLibrary("D:\test\exemple")
    Un message d'erreur apparait à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "D:\Test\test.py", line 2, in <module>
        lib_c = cdll.LoadLibrary("D:\test\exemple")
      File "C:\Users\   ...    \Python36\lib\ctypes\__init__.py", line 426, in LoadLibrary
        return self._dlltype(name)
      File "C:\Users\   ...    \Python36\lib\ctypes\__init__.py", line 348, in __init__
        self._handle = _dlopen(self._name, mode)
    OSError: [WinError 126] Le module spécifié est introuvable
    A priori je n'ai pas d'erreur dans le chemin d'accès au fichier dll puisqu'en mettant le fichier msvcrt.dll dans ce dossier et en remplaçant "exemple" par "msvcrt" dans mon code je n'ai pas de message d'erreur.

    Auriez vous une solution à mon problème ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par YannCER Voir le message
    Auriez vous une solution à mon problème ?
    Vous avez deux soucis potentiels:
    • le nom du fichier: "D:\test\exemple" le "\" est un caractère d’échappement. Si vous tapez çà à la console Python, çà retourne 'D:\test\\exemple' et ce fichier là n'existe pas. Doublez les "\" ou utilisez des raw-strings r"D:\test\exemple".
    • La DLL et Python sont tout eux 32 bits ou 64 bits: s'ils n'ont pas été compilés de façon cohérente, le fichier risque de ne pas être trouvé.



    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour ce retour.

    Par rapport à vos deux propositions :
    - j'avais bien identifié ce problème potentiel lors de mes recherches et avais testé le doublement des "\" ou les raw-strings. Par acquit de conscience, j'ai retesté les deux syntaxes mais rien n'y fait, toujours le même problème.
    - la bibliothèque a été compilée en 64 bits. Le premier message d'erreur que j'avais reçu indiquait une incompatibilité entre 64 et 32 bits ; j'utilisais Python 32 bits. En passant à Python 64 bits ce message d'erreur a disparu, pour laisser place au message d'erreur qui m'a conduit à poster sur ce forum, module introuvable.

    Auriez vous d'autres solutions à proposer ? Faut il que j'oublie l'utilisation de ctypes et passe par un autre moyen ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par YannCER Voir le message
    Auriez vous d'autres solutions à proposer ? Faut il que j'oublie l'utilisation de ctypes et passe par un autre moyen ?
    A priori, ctypes fonctionne...
    Donc c'est plutôt côté DLL qu'il y a des soucis.
    Soit son format n'est pas compatible avec ce que supporte ctypes (voir la documentation), soit il y a d'autres soucis.
    Essayez déjà de charger votre DLL depuis un programme C/C++, çà devrait vous donner quelques pistes.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je reviens après un certain temps sans grande nouveauté.

    Je ne maitrise pas le C++. Une personne maitrisant le C++ utilise largement la libraire sans problème apparent.
    J'ai essayé sur d'autres DLL qui proviennent du même propriétaire mais peut être un peu plus anciennes. J'arrive à en importer certaines mais pas d'autres.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par YannCER Voir le message
    J'arrive à en importer certaines mais pas d'autres.
    Vous avez des utilitaires de développements (qui dépendent du système) genre DUMPBIN sous Windows qui devrait vous permettre de les inspecter et trouver les différences.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Après plusieurs mois, je me suis remis sur le sujet et EUREKA ! J'ai réussi à charger la librairie. La librairie que j'essayais en vain de charger faisait appel à une autre librairie. Cette librairie n'étant pas chargée auparavant et n'étant pas présente dans le dossier system32, python n'arrivait pas à la trouver et renvoyait une erreur. En chargeant préalablement cette deuxième librairie, le chargement de la première se passe sans problème.

    Merci pour le temps que vous avez accordé à ma demande.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Python Erreur mémoire en utilisant Ctypes.
    Par sofianterki dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 29/12/2014, 22h35
  2. [XL-2007] Cast - Utilisation de CType
    Par mac&cheese dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/04/2014, 11h22
  3. Utilisation de Ctype avec un type variable
    Par Tommy57 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/07/2013, 09h41
  4. Utilisation de ctypes pour extraire une valeur/un tableau
    Par XeO3n dans le forum Interfaçage autre langage
    Réponses: 1
    Dernier message: 04/07/2012, 00h33
  5. Utilisation de JS-CTYPE
    Par dubitoph dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/11/2009, 11h03

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