|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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 ? |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
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. |
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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)
|
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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. |
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
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. |
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
|
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
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. |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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 |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com