Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1126 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  probleme pour utiliser des fonctions c++ dans des dll

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme pour utiliser des fonctions c++ dans des dll

n°1322496
mandagor
GAZZzzzzz.......
Posté le 10-03-2006 à 09:23:25  profilanswer
 

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 :
  1. >>>from ctypes import *
  2. >>>essai = cdll.load("fichier.dll", mode=None)
  3. >>>essai.Close()
  4. Traceback (most recent call last):
  5.   File "<input>", line 1, in ?
  6.   File "C:\Python24\Lib\site-packages\ctypes\__init__.py", line 313, in __getattr__
  7.     return self.__getitem__(name)
  8.   File "C:\Python24\Lib\site-packages\ctypes\__init__.py", line 316, in __getitem__
  9.     func = self._FuncPtr(name, self)
  10. AttributeError: function 'Close' not found


 
alors que dans le fichier .h des sources, cette fonction close existe :

Code :
  1. public:
  2. 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);
  3. unsigned char Close   (void);
  4. unsigned char Relance (void);
  5. unsigned char Send    (unsigned char *buff_emi, unsigned char longueur);
  6. 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


---------------
Mes ventes vers Grenoble & Gresivaudan
mood
Publicité
Posté le 10-03-2006 à 09:23:25  profilanswer
 

n°1323578
zen 68
Posté le 12-03-2006 à 09:45:52  profilanswer
 

ta fonction est visible que par la class, d'abord il faut instancier la class  et ensuite utiliser  Close() avec cet instance

n°1323965
mandagor
GAZZzzzzz.......
Posté le 13-03-2006 à 09:09:10  profilanswer
 

be en faisant essai = cdll.load("fichier.dll", mode=None) je cré bien une instance de la classe non?


---------------
Mes ventes vers Grenoble & Gresivaudan
n°1324113
zen 68
Posté le 13-03-2006 à 13:07:58  profilanswer
 

Non. en faisant essai = cdll.load(...) tu as acces au dll non pas au(x) classe(s) se trouvant à l'interieur de dll. Je crois qu'il y a qq probleme avec ctypes pour utiliser les class de C++ ... Pour surmonter les difficultés de ctypes, cad pour instancier la class il peut eventuellement avoir une fonction dans le dll qui return une instance. Tu peux essayer le code ci dessous (le resultat  n'est pas garantie). Si non il faut utiliser  SWIG .  
 
dans le dll:
class MyClass{  
....
public:
unsigned char Close  (void){ ....}
};
MyClass doClass(..){
return new MyClass();
}
en python:
essai = cdll.load("fichier.dll", mode=None)
z= essai.doClass()
z.Close()

n°1324157
mandagor
GAZZzzzzz.......
Posté le 13-03-2006 à 14:02:21  profilanswer
 

merci de la reponse
 
hum mais le hic c'est que je peux pas modifier la DLL :/
 
je vais chercher du coter de swig car je ne sais pas ce que c'est.


---------------
Mes ventes vers Grenoble & Gresivaudan

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  probleme pour utiliser des fonctions c++ dans des dll

 

Sujets relatifs
ne pas utiliser index.html comme page d'accueil ?Problème de sessions et de tables
Problème d'appel à une servlet avec HREF et chemin relatifProbleme connexion BD après changement de version de Weblogic
[SQL] Probleme tout con avec 2 IDproblème avec mkdir
[VBA] Excel : problème avec la fonction PrintTomcat5 / Axis2 : Problème avec le security manager.
[XQuery]Problème de requête[RESOLU] probleme avec le lower_bound d'un vector de classes
Plus de sujets relatifs à : probleme pour utiliser des fonctions c++ dans des dll


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR