J'enroulant cette lib avec Python SWIG qui a une fonction qui ressemble à ceci:Emballage un argument vide de * en Python SWIG
int set_option(Foo *foo, const char *name, void *value);
Dans la lib const char *name
est mis en correspondance avec un type que j'ai accès à regarder : int
, char *
, char **
.
Le code wrapper généré par défaut accepte uniquement un void *
(naturellement) enveloppé. Quelle est la meilleure façon de faire accepter la méthode encapsulée par un objet Python comme argument, et de faire la vérification de type, et la conversion de Python en C dans mon propre code C? Je pense que ce serait une sorte de carte de type, mais hélas, je ne peux pas le comprendre.
@Goodies
In [12]: lib.set_option(foo, "option", "value")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-4ccf706b5c50> in <module>()
----> 1 lib.set_option(foo, "option", "value")
TypeError: in method 'set_option', argument 3 of type 'void *'
Je ne comprends probablement pas cela correctement, mais ne prenez-vous pas généralement un pointeur PyObject comme un argument et analyser les arguments dans C? Il ne devrait pas accepter un objet spécifique par défaut afaik. Nouveau à CPython, cependant. – Goodies
Envie de poster ça dans OP? C'est difficile à voir dans les commentaires. – Goodies
@Goodies: Oui, le formatage n'est pas bien dans le commentaire. – totoro