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 :

Extension C++/Python


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 94
    Points : 94
    Points
    94
    Par défaut Extension C++/Python
    Bonjour, je dois interfacer des classes C++ afin de pouvoir les utiliser dans Python. J'ai heureusement peut de problèmes, mais j'ai un problème pour interfacer des fonctions C++ qui prennent une référence comme paramètre.
    La fonction à interfacer est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void 	Set (const std::string &str);
    Le problème est que le paramètre passé est succeptible d'être modifié, mais dans la fonction d'intefacage je n'arrive pas à modifier ce paramètre passé dans Python.

    Voici le bout de code que j'ai écrit pour interfacer la fonction.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    /* Interfaçage de la fonction Set */
    static PyObject * StringStreamPython_Set(PyObject * self, PyObject *args) {
    	char* cstr;
     
    	// Parsing des arguments
    	if(!PyArg_ParseTuple(args, "s", &cstr))
    		return NULL;
     
    	const std::string str = cstr;
    	((StringStreamPython*)self)->obj->Set(str);
     
    	/* le paramètre de la fonction Set était passé par référence, 
    	   il est donc possible qu'il ait été modifié, on affecte donc 
    	   la chaîne str à la chaîne Python passée en argument */
    	//char* cstr2  = (char*)str.c_str();
     
            // Pour tester, mais la chaîne passé dans Python n'est quand
            // même pas modifiée
    	char* cstr2 = "aa";
     
    	/* args est un Tuple Python */
    	PyObject* elem = PyTuple_GetItem(args, 0);
    	elem = Py_BuildValue("s", (const char*)cstr2);  
     
    	Py_INCREF(Py_None);
        return Py_None;
    }
    Voilà.
    Merci.

    Bouba

  2. #2
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 94
    Points : 94
    Points
    94
    Par défaut
    Pour ceux qui aurait le même problème, c'est bon, je l'ai résolu, en fait j'ai été obligé de passer par du code en Python. La solution, réaliser une classe Python qui hérite de la classe d'extension C++. Et réaliser la surcharge des opérateurs en Python.

    Bouba

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

Discussions similaires

  1. cross compilation d'extension ecrite en c pour python
    Par nano3000 dans le forum Général Python
    Réponses: 1
    Dernier message: 03/05/2015, 18h05
  2. Installation de "python-virtkey extension"
    Par troumad dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 30/08/2010, 20h36
  3. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  4. Extension python en c avec swig sous win32
    Par liomec dans le forum Interfaçage autre langage
    Réponses: 7
    Dernier message: 31/08/2008, 16h01
  5. extension API C de python
    Par Freyja dans le forum Interfaçage autre langage
    Réponses: 2
    Dernier message: 04/07/2006, 09h12

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