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 :

probleme d'utilisation de DLL developpées en C++ avec python


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2004
    Messages : 95
    Points : 25
    Points
    25
    Par défaut probleme d'utilisation de DLL developpées en C++ avec python
    bonjour a tous,

    je me forme à python depuis le debut de la semaine et j'utilise SPE comme IDE sous windows.
    j'ai déja bien avancé mais je suis face à un problème que je n'arrive pas a résoudre.
    On m'a fourni des DLL développé sous visual c++ (ainsi que les sources) et j'essaye d'importer les fonctions de cette DLL.
    j'ai fais pas mal de recherche et j'ai trouvé "ctypes"

    voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>>from ctypes import *
    >>>essai = cdll.load("fichier.dll", mode=None)
    >>>essai.Close()
    Traceback (most recent call last):
      File "<input>", line 1, in ?
      File "C:\Python24\Lib\site-packages\ctypes\__init__.py", line 313, in __getattr__
        return self.__getitem__(name)
      File "C:\Python24\Lib\site-packages\ctypes\__init__.py", line 316, in __getitem__
        func = self._FuncPtr(name, self)
    AttributeError: function 'Close' not found
    alors que dans le fichier .h des sources, cette fonction close existe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public:
    	unsigned char Init    (void* pCanal, CString num_port, int vitesse, int iNbRepMaxParam, int timeout_rec, int timeout_ack, int nb_err_max, DATAREC_CALLBACK setDataRec);
    	unsigned char Close   (void);
     
    	unsigned char Relance (void);
    	unsigned char Send    (unsigned char *buff_emi, unsigned char longueur);
    	unsigned char Receive (unsigned char *buffer_donnees, int *longueur);
    je ne comprend pas comment faire pour utiliser ce module ctypes...

    alors si vou spouviez m'aider

    merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2004
    Messages : 95
    Points : 25
    Points
    25
    Par défaut
    bon j'ai reussi a avancer un peu en tatonant.
    j'avais un fichier .lib que j'ai ouvert et j'ai vu que toutes les fonctions définies dans la dll (ls2208.dll) apparaissaient avec un "2208" en plus.
    j'ai donc essayer de faire ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>>essai = cdll.load("LS2208.dll", mode=None)
    >>>essai.Close2208
       <_FuncPtr object at 0x025203F0>
    >>>essai.Close2208()
       Traceback (most recent call last):
         File "<input>", line 1, in ?
       ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong calling convention
    >>>essai.Close2208(None)
       Traceback (most recent call last):
         File "<input>", line 1, in ?
    ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong calling convention
    >>>essai.Close2208(1)
       Traceback (most recent call last):
         File "<input>", line 1, in ?
    WindowsError: exception: access violation reading 0x000002D9
    donc ce coup ci j'arrive bien a trouver les fonction de ma dll mais ca block au niveau des arguments... je ne comprend pas.


    sinon j'aurai aussi voulu savoir quel était la différence entre ce que j'ai marqué au dessus pour appeler la dll et ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>>cdll.load("c:\\progPython\\LS2208.dll")
       <CDLL 'c:\progPython\LS2208.dll', handle 2e30000 at 254f050>
    >>>cdll.LS2208.Close2208()
    Traceback (most recent call last):
      File "<input>", line 1, in ?
    ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong calling convention

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Pas de réponse pour l'instant, mais j'ai une question
    J'ai beau chercher, je ne trouve pas beaucoup de littérature ou d'exemple sur l'import de DLL dans un programme en python. J'ai bien vu qqch sur SWIG mais ça ne me parait pas trivial.
    J'ai essayé de suivre ta méthode, mandagor, mais je bloque bien avant toi puisque ma DLL n'est pas trouvée même en indiquant le chemin complet (cf . ci-après).

    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:\Dev\Python\CreeListe.py", line 23, in <module>
        essai = cdll.load('D:/Dev/Python/DLLProtect.dll', mode=None)
      File "C:\Python25\lib\ctypes\__init__.py", line 364, in __getattr__
        dll = self._dlltype(name)
      File "C:\Python25\lib\ctypes\__init__.py", line 290, in __init__
        self._handle = _dlopen(self._name, mode)
    WindowsError: [Error 22] Le module spécifié est introuvable
    Je suis malheureusement complètement débutante en python et loin d'être un cador en prog Windows.
    Quelqu'un peut-il m'aider à démarrer ?

    D'avance merci

  4. #4
    Membre éclairé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2006
    Messages : 403
    Points : 650
    Points
    650
    Par défaut
    quand j'ai commencé en Python j'ai un peu joué avec les DLLs et SWIG n'est pas si compliqué que ça. Ce tutoriel est assez bien construit :

    http://dosimple.ch/articles/Python-SWIG/

Discussions similaires

  1. Utiliser une DLL faite en delphi avec VB6
    Par illuch dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 23/05/2014, 07h56
  2. Utilisation de DLL et fichier .h avec Delphi7
    Par Wilco dans le forum Langage
    Réponses: 16
    Dernier message: 03/10/2009, 15h32
  3. utiliser une DLL faite en vb6 avec VB.net
    Par j.sineau dans le forum VB.NET
    Réponses: 6
    Dernier message: 10/12/2007, 11h33
  4. Probleme pour utiliser ma dll en release
    Par irnbru dans le forum MFC
    Réponses: 4
    Dernier message: 30/09/2007, 16h01
  5. Réponses: 1
    Dernier message: 18/07/2006, 17h44

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