Bonjour,
Je voulais savoir si l'on pouvait directement convertir grâce à PyArg_Parse PyObject en VARIANT.
Merci beaucoup.
Bonjour,
Je voulais savoir si l'on pouvait directement convertir grâce à PyArg_Parse PyObject en VARIANT.
Merci beaucoup.
C'est quoi VARIANT ?
(désolé peut être que la question est stupide mais je ne connais pas ce terme).
Salut Tamiel, je ne conaissais pas non plus.
Le VARIANT est un type utilisé notamment qd tu implémentes un serveur OPC.
Au lieu de dire, je veux un float, tu dis je veux un VARIANT de float.
Dans la fonction :
PyObject_CallMethod(pyinstance, "setList", "O", mylist);
est -il possible de renvoyer plusieurs objet du genre :
PyObject_CallMethod(pyinstance, "setList", "O", mylist, "s", "tutu", "i", 5, "f",3.14);
en Python il y aura autant de para que j'en renvoie.
Imginons que pour cette meme methode python je fasse un return d' une fonction qui prend en paramétre ces 3 derniers élements mais qui me renvoie qq de specifique,
est-ce que je peux récupérer ce renvoie en faisant qq chose comme :
PyObject* renvoie = PyObject_CallMethod(pyinstance, "setList", "O", mylist, "s", "tutu", "i", 5, "f",3.14);
et ensuite traiter renvoie comme il se doit...
Suis je clair?
Merci
++
PS : pour la conversion du VARIANT c'est ok pour moi.
Merci
Dans ce cas tu devrais renvoyer une liste (PyList) ou un tuple (PyTuple).
Salut Tamiel, Donc effectivement le call method avec plusieurs arguments ne fonctionne pas.
Je dois faire une liste mais le problème est que mes arguments sont des strings, strings, double.
Il faut donc que je fasse un tuple, mais comment remplir ce tuple?
Après je pense que du cote python, je mais le nom de la fonction prenant en parametre ce retour : tempret et pour lire dans ce tuple je pense faire un tempret [1], ou tempret [2], ou tempret [3].
Est -ce coherent?
Merci beaucoup,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 PyObject* myTuple = PyTuple_New(0); PyTuple(myTuple, PyString_FromString(IpsaName.c_str()), PyString_FromString(EquivalentFieldAddress.c_str()), PyFloat_FromDouble(value)); PyObject* class_OPCtoIPSA = PyInstance_New(funcipsamapping, NULL, NULL); //We do not need to increase because PyInstance_New increase the the number of object automatically //Py_XINCREF(myTuple); //Py_XINCREF(class_IscLoad_Float); //PyObject_CallMethod(class_OPCtoIPSA, "un nom de methode", "s", IpsaName, "s",EquivalentFieldAddress,"f",value); PyObject_CallMethod(class_OPCtoIPSA, " un nom de methode", "O", mylist); Py_XDECREF(class_OPCtoIPSA);
PS, j'ai trouve mes memory leak, il venait de mes Py_DECREF...
Je partirais sur ce code là :
J'ai une méthode toto dans la classe Toto qui peut prendre un nombre d'arguments variable *args .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Toto: def to(self, *args): return [ "test-"+str(x) for x in args ] t = Toto() res = t.to(1,2,3,4) print res
Au niveau de ton code en C tu dois appeler la méthode avec les arguments que tu veux et récupérer le résultat sous forme de tuple ou de liste .
Tu as juste à convertir en C :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 t = Toto() res = t.to(1,2,3,4)
Impeccable, tout fonctionne comme je veux!
Merci beaucoup
Julien.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager