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 :

ctypes liste chainée


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 81
    Points : 71
    Points
    71
    Par défaut ctypes liste chainée
    Bonjour,
    Voila mon problème, je vais essayer d'etre clair.
    Dans un fichier .pyl je dois Appeler une fonction MaFunc(c_double, liste_chainée)
    j'ai donc fait ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class cell(Structure):
        pass
    cell._fields_=[("entier", c_double),
                      ("next", POINTER(cell))]
    malib.mafuncC.argtype=[c_double, POINTER(cell)]
    malib.mafuncC.restype=c_double
    def MaFunc(Entier, ????(ma liste chainée)
      return malib.maFunC(Entier, liste chainée)
    Donc finalement mon probleme est que que je ne sais pas comment lui passer une liste chainée (en gros completer les ???), par exemple est ce que ca comme appel ca marchera :
    MaFunc(1.0, [1,2]) ????
    parce que c'est ca le but de cette fonction de lui passer une liste chainée comme ctype
    du coté du C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct cell{
        double entier;
        struct cell *next;
    } cell;
    double maFuncC(double Entier, cell *cell)
    De ce coté la est ce bon aussi ???


    En gros je voudrais faire un appel en Python MaFunc(2.0,[1.,2.,3.,7.])
    qui prend comme parametre un double et une liste . Est ce que je m y prends bien ou y'a-t-il plus simple
    J'ai fait quelques test c'est plus compliqué que je ne le pensais. Car si je cree comme ctype une liste chainée je suis obligé de l initialiser
    Donc je remet a jour ma question: je veux faire en python MaFunc(2.0,[1.,2.,3.,7.]) ou le second argument est une liste de taille variable, comment je dois faire avec les ctypes pour qu'en C je recupere bien une liste
    Pareil si j'ai besoin de MaFunc(2.0,[[a,b],[c,d]]) comment je fais pour le ctypes merci beaucoup
    Merci d'avance de vos reponses

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Août 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    J'ai un peut avancé mais je bloque toujours
    j'ai cree un class CTypesList en Python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class CTypesList(Structure):
        "create a list for the given type, with optional initial preallocation space"
        def __init__(self, obj):
            #self.data = obj
            self.size = len(obj)
            self.entier1=obj[0]
     
        def __len__(self):
            return self.size
        def __getitem__(self, i):
            if i >= self.size:
                raise IndexError(i)
            if i < 0:
                i = self.size + i
                if i < 0:
                    raise IndexError("list index out of range")
            return self.data[i]
    CTypesList._fields_=[("entier1", c_double),
                      ("next", POINTER(CTypesList))]
    malib.mafuncC.argtype = (c_double,CTypesList)
    def MaFunc(entier,List)
    return malib.mafuncC(entier,List)
    en C j'ai bien ma structure chainée CtypesLits
    Mais le probleme c'est au niveau du _init_ je n arrive pas a remplir bien ma structure de liste chainé car par exemple je ne crée jamais la deuxieme cellule next
    En effet si je prends comme liste : T=[1,2]
    Mafunc(1.,T)
    ba quand je "rentre" dans le Code C ba dans ma liste chainer j ai juste le premier entier qui vaut bien 1 le reste vu que je ne les pas allouer ya rien ce qui est normal
    Comment Faire ?
    Pareil pour la desollacation ??
    Merci d'avance

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2005, 23h42
  2. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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