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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    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 émérite
    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
    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 émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    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 émérite
    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
    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 émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    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 émérite
    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
    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 émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    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.

+ 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