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 :

PyArg_Parse(pointervar,Un VARIANT, ..)


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut PyArg_Parse(pointervar,Un VARIANT, ..)
    Bonjour,

    Je voulais savoir si l'on pouvait directement convertir grâce à PyArg_Parse PyObject en VARIANT.

    Merci beaucoup.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    C'est quoi VARIANT ?

    (désolé peut être que la question est stupide mais je ne connais pas ce terme).

  3. #3
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Dans ce cas tu devrais renvoyer une liste (PyList) ou un tuple (PyTuple).

  5. #5
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut Mettre Element dans un 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?

    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);
    Merci beaucoup,
    PS, j'ai trouve mes memory leak, il venait de mes Py_DECREF...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Je partirais sur ce code là :
    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
    J'ai une méthode toto dans la classe Toto qui peut prendre un nombre d'arguments variable *args .

    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)

  7. #7
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Impeccable, tout fonctionne comme je veux!

    Merci beaucoup
    Julien.

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

Discussions similaires

  1. Variante de TUpDown avec incrément réel
    Par Bernard Grosdoy dans le forum Composants VCL
    Réponses: 6
    Dernier message: 20/10/2004, 16h40
  2. Transtypage d'un variant.
    Par Lodonez vincent dans le forum Langage
    Réponses: 4
    Dernier message: 02/09/2004, 19h42
  3. Champ Date à '01/01/0001' -> Pb conversion de variant !!!
    Par AnnSo dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/06/2004, 16h54
  4. conversion : VARIANT FAR* URL vers CString
    Par kam dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2004, 13h32
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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