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 :

Importer un objet c++ vers Python


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut Importer un objet c++ vers Python
    Bonjour,

    Non sans quelque difficulté, je suis parvenu à exporter des classes c++ vers du python grace à SWIG. J'aimerais maintenant exposer aux scripts Python une instance de l'une de ces classes, créée par une partie du code c++.

    Quelles sont les options possibles ? (Je connais peu python) Puis-je en faire une variable globale ? Dois-je l'exposer dans un module ? Quelles fonctions de l'API me seraient utiles pour ça ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je ne comprends pas bien ce que tu souhaites, si tu as "wrappé" tes classes avec swig elles sont accessibles depuis python.

    Si c'est une fonction particulière qui crée la classe il suffit de la "wrapper" également et de l'appeler dans le code python.

    Peut-être une explication un peu plus fine de ton problème est-elle nécessaire.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    L'instance existe déjà et n'a pas été crée par le script Python. Je veux permettre au script d'y accéder. (A travers une instance d'une proxy class par exemple)

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je ne comprends pas vraiment comment est structuré ton programme. S'agit-il d'un interpréteur python embarqué ?

    Moi ce que je ferais (mais ce n'est certainement pas optimal) c'est créer une fonction qui prend l'adresse du pointeur sur ton instance et retourne l'objet "enveloppé". Après ça fait longtemps que je n'est pas utiliser SWIG, en cython c'est relativement aisé mais il faut écrire le code du "wrapper".

    Quoi qu'il en soit, plus d'explications sur le contexte utile pour comprendre ton problème.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Citation Envoyé par Alexis.M Voir le message
    S'agit-il d'un interpréteur python embarqué ?
    Oui. Je pensais l'avoir écrit, mais j'ai manifestement oublié cette information. J'embarque Python dans une application C++.

    J'aimerais éviter de modifier le code généré par SWIG ou de me baser sur le code généré par une version en particulier, ce qui rendrait l'évolution du logiciel assez peu aisée. Si SWIG n'offre pas les fonctionnalités que je désire, je changerai de système. J'aimerais quand même éviter d'écrire tous les wrappers à la main.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je ne suis pas assez compétent sur SWIG pour t'aider mais il me semble qu'il te sera nécessaire à un moment ou un autre de créer un structure qui contient de manière globale les données qui doivent être visible par python et créer un API qui permet d'accéder à ces données.

    Pense à une application comme Blender ou OOo qui permet d'acceder à ses données internes sous forme d'une API. Si on veut créer un "binding" avec un autre langage il suffit d'implémenter l'API dans ce langage.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Citation Envoyé par Alexis.M Voir le message
    créer un API qui permet d'accéder à ces données.
    C'est ce que fait SWIG à partir des fichiers d'interface que je lui donne.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je me suis mal exprimé, ce que je veux dire c'est que le programme C++ doit être conçu pour exposer ses données internes (ici l'instance de la classe créée par le code C++) et proposer une API pour y accéder.

    Une façon simpliste de le faire est en effet de créer une variable globale et une fonction qui permet d'y accéder.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Je ne sais toujours pas si SWIG propose une solution. Je me suis tourné vers Python.Boost qui est bien plus orienté intégration de Python dans une application C++. La conversion d'un objet c++ vers le wrapper de sa classe est décrit sur la page du wiki Python consacré à Boost :

    http://wiki.python.org/moin/boost.py...mbeddingPython

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

Discussions similaires

  1. importer données de Ecxel vers Python
    Par ranianwayra dans le forum Général Python
    Réponses: 12
    Dernier message: 29/10/2008, 15h39
  2. Importer des objet 3d
    Par wikers dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/02/2004, 15h43
  3. Réponses: 6
    Dernier message: 12/02/2004, 21h55
  4. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53

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