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

WinDev Discussion :

Connexion entre deux applications en utilisant des "Pipes" en Windev


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut Connexion entre deux applications en utilisant des "Pipes" en Windev
    Bonjour à tous je jeune developpeur en Windev, j'avais fait un autre poste pour une communications en OPOS, mais cela ne marche pas, j'ai abandonné cette méthode car je pense que la notice ne devait pas être la bonne. Merci à tous pour votre Aide ^^

    Je souhaite me connecter à une applications pour :
    1 : Récuperer un Poids d'une applications connecté à une balance.
    2 : Envoyer un prix au Kg à un bandeaux d'affichage d'une applications connecté à une balance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pipe to VCODisp:      \\.\pipe\VCOin
    Pipe from VCODisp:  \\.\pipe\VCOout
    Merci de votre aide précieuse

    Nom : Untitled4.png
Affichages : 258
Taille : 20,7 Ko
    Nom : Untitled5.png
Affichages : 255
Taille : 35,9 Ko

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Tu ne nous dis pas comment tu "lis" la valeur (c'est dans un fichier texte ? Ni comment tu va la transmettre à ton afficheur...

    Une solution :
    - Tu as un timer (timersys) qui lit régulièrement le dossier où se trouve le fichier (Je pars du postulat que c'est un fichier)
    - S'il y a un fichier, il lit le contenu et l'envoie (par la poste avec accusé de réception ?) à l'afficheur.
    - Il efface le fichier.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut
    À ce que j’ai cru comprendre on lis et on envoi à travers de pipe processus Windows \\.\pipe\ entre les deux application, la première application c’est le VCO le bandeau d’affichage du poids. Et la deuxième c’est celle que je souhaite développer.

    Je ne pense pas que ce soit une communication via un fichier mais via un genre de buffer mémoire tampon processus :/

    Merci frenchsting

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut
    J'ai Windev 22,
    dans la LST 118, il y une collection de procedure pour lire et ecrire sur un Pipe
    mais je n'arrive pas à l'importer car elle est compatible avec la version 24,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HPipeOut = PipeOuvre("\\.\pipe\VCOIn",PIPE_OUVERTURE_ECRITURE)
    PipeEcritBuffer(HPipeOut, Sai_Text_Ecrit)
    PipeFerme
     
    HPipeIn = PipeOuvre("\\.\pipe\VCOOut",PIPE_OUVERTURE_LECTURE)
    PipeLitBuffer(HPipeIn, Sai_Text_Lu)
    PipeFerme
    Je pense qu'avec ce code cela fonctionnera, mais il faudrai une collection de procédure :/ pour utiliser les fonctions

    Merci de votre aide

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Bonjour,

    Tu ne nous dis pas comment tu "lis" la valeur (c'est dans un fichier texte ? Ni comment tu va la transmettre à ton afficheur...

    Une solution :
    - Tu as un timer (timersys) qui lit régulièrement le dossier où se trouve le fichier (Je pars du postulat que c'est un fichier)
    - S'il y a un fichier, il lit le contenu et l'envoie (par la poste avec accusé de réception ?) à l'afficheur.
    - Il efface le fichier.
    Est ce que ecrire sur un fichier ca peut etre ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Numfic est un entier
    Numfic = fOuvre("\\.\pipe\VCOOut",foLecture)
    fLit(Numfic,SAI_Text)
    fFerme(Numfic)
     
    Numfic1 est un entier 
    Numfic1 = fOuvre("\\.\pipe\VCOIn", foEcriture)
    fEcrit(Numfic1,"toto"+EOT)
    fFerme(Numfic1)

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Dans l'absolu, oui.
    Toutefois, \\.\pipe fait référence à un périphérique sur lequel il faut se connecter.
    Il est aussi possible que les échanges se fasse via un socket, via sEcrit ... et ça, ça ne se devine pas, c'est dans la doc de ton produit.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Dans l'absolu, oui.
    Toutefois, \\.\pipe fait référence à un périphérique sur lequel il faut se connecter.
    Il est aussi possible que les échanges se fasse via un socket, via sEcrit ... et ça, ça ne se devine pas, c'est dans la doc de ton produit.
    Bonsoir Voroltinquo, j'ai chercher sur les sockets et aussi sEcrit, j'ai pas réussi ...
    j'essai de me connecter avec une API

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    API("kernel32", "CallNamedPipeA" , &lpNamedPipeName, &lpInBuffer, nInBufferSize, &lpOutBuffer, nOutBufferSize, &lpBytesRead, nTimeOut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Déclaration des variables
    sPipeName est une chaîne = "\\.\pipe\VCOout"
    sInBuffer est une chaîne = "1200"
    sOutBuffer est une chaîne
    nInBufferSize est un entier = Taille(sInBuffer) * Taille(sInBuffer)
    nOutBufferSize est un entier = 512 // Taille du tampon de sortie
    nBytesRead est un entier
    nTimeOut est un entier = 20000 // Temps d'attente en millisecondes
     
    // Appel de la fonction API
    API("kernel32", "CallNamedPipeA", sPipeName, sInBuffer, nInBufferSize, sOutBuffer, nOutBufferSize, nBytesRead, nTimeOut)
    Info(sOutBuffer)
    j'ai une doc microsoft la https://learn.microsoft.com/fr-fr/wi...on-named-pipes

    Help Please !!

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Dans un premier temp, l'API attend des adresses (entiers système) et tu passes directement la variable.
    L'API travaille avec des buffer et tu envoies des chaines.
    Le buffer d'entrée devrait, à priori, être la valeur hexa de la valeur à passer, i.e. 04b0 pour 1200. En ce qui concerne la représentation des réels en hexa, je te renvoie vers la norme IEEE-754.
    Par ailleurs, en lisant la doc de CallNamedPipeA on peut lire que la fonction attend si aucune données n'est disponible.
    Enfin, es tu sur du nom du pipe ? Que renvoie la fonction ? Je ne vois pas de connexion au pipe via ConnectNamedPipe
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut
    Bonsoir Voroltinquo, merci de ton aide

    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
    20
    21
    22
    23
    RetourFonction est un entier système // Type C :HANDLE
    lpName est une chaine = "\\.\pipe\VCOout"// Type C :LPCSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
    dwOpenMode est un entier =0x00000002// Type C :DWORD
    dwPipeMode est un entier =0x00000004// Type C :DWORD
    nMaxInstances est un entier =1// Type C :DWORD
    nOutBufferSize est un entier =256 // Type C :DWORD
    nInBufferSize est un entier =256// Type C :DWORD
    nDefaultTimeOut est un entier =50// Type C :DWORD
    lpSecurityAttributes est un entier // Pointeur sur structure LPSECURITY_ATTRIBUTES
    RetourFonction=API("KERNEL32","CreateNamedPipeA",lpName,dwOpenMode,dwPipeMode,nMaxInstances,nOutBufferSize,nInBufferSize,nDefaultTimeOut,lpSecurityAttributes)
    ///////////////////////////////////////////////
    bufFer1 est un Buffer
    Chaine1 est une chaîne 
     
    RetourFonction1 est un booléen // Type C :BOOL
    lpNamedPipeName est une chaine ="\\.\pipe\VCOout"// Type C :LPCSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
    lpInBuffer est un entier système // Type C :LPVOID
    nInBufferSize1 est un entier =256// Type C :DWORD
    lpOutBuffer est un entier système = &bufFer1// Type C :LPVOID
    nOutBufferSize1 est un entier =256// Type C :DWORD
    lpBytesRead est un entier système =&Chaine1// Type C :LPDWORD
    nTimeOut est un entier =0x00000000// Type C :DWORD
    RetourFonction1=API("KERNEL32","CallNamedPipeA",lpNamedPipeName,lpInBuffer,nInBufferSize1,lpOutBuffer,nOutBufferSize1,lpBytesRead,nTimeOut)
    j'ai RetourFonction = -1 et RetourFonction1 = 0 :/
    j'ai même essayer de jouer avec les PIPE_TYPE_BYTE et PIPE_TYPE_MESSAGE ... j'espère commencer a bruler

  10. #10
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    A priori vous devriez plutôt utiliser la fonction CreateNamedPipeW si je me réfère au code fourni dans la LST (que je ne peux pas vous donner en l'état pour des raisons bien évidentes ...)

    Ouveture du pipe en lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sNomPipe est une chaîne UNICODE
    nModeCreation est un entier sans signe sur 4 octets = 1 // Entrant
    nModeMessage est un entier sans signe sur 4 octets = 0x00000000 + 0x00000001 // Lecture en octets + Non bloquant
    nMaxInstances est un entier sans signe sur 4 octets = 255 // Illimité
    nTailleBufferSortant est un entier sans signe sur 4 octets = 512
    nTailleBufferEntrant est un entier sans signe sur 4 octets = 512
    nPSecurity est un entier système = Null
     
    nHPipe est un entier système = API("KERNEL32","CreateNamedPipeW", sNomPipe, nModeCreation, nModeMessage, nMaxInstances, nTailleBufferSortant, nTailleBufferEntrant, 0, nPSecurity )
    Lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bufLecture est un Buffer = Répète(CaractUnicode(0),512)
    nOctetsLus est un entier sans signe sur 4 octets
    API("KERNEL32","ReadFile", nHPipe, &bufLecture, Taille(bufLecture), &nOctetsLus, Null )
    Fermeture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    API("KERNEL32","CloseHandle", nHPipe)

  11. #11
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Pour un peu plus de lisibilité, tu devrais plutôt utiliser des noms simples pour tes nom de pipes. Les "\\.\pipe" dont typiquement référence à des chemins (relatifs) d'une arborescence disque. Un "VCOout" est simple et efficace.

    Une petite astuce (pour compléter les très bonnes infos de themayu) : Les API, c'est super mais vérifie bien si tu dois utiliser des pointeurs sur des variables. On écrit &MaVariable et pas MaVariable.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Bonjour,
    Pour un peu plus de lisibilité, tu devrais plutôt utiliser des noms simples pour tes nom de pipes. Les "\\.\pipe" dont typiquement référence à des chemins (relatifs) d'une arborescence disque. Un "VCOout" est simple et efficace.
    ...
    A priori non, si on se réfère à la documentation MS le pipe doit commencer par "\\.\pipe"
    https://learn.microsoft.com/en-us/wi...eatenamedpipew

  13. #13
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par themayu Voir le message
    A priori non, si on se réfère à la documentation MS le pipe doit commencer par "\\.\pipe"
    C'est ce que j'écrivaisais dans mon post #6 : \\.\pipe fait référence à un périphérique de type pipe. De la même manière que \\.\COM1 fait référence à un périphérique branché sur le port COM1
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    En dotnet c'est beaucoup plus simple d'utiliser les "Pipes". Voici un exemple de code client qui utilise l'assemblage dotnet System.core :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    client est un System.IO.Pipes.NamedPipeClientStream("PipesOfPiece")
    client.Connect(5000) // TimeOut de 5 secondes
    client.WaitForPipeDrain()
    reader est un System.IO.StreamReader(client)
    writer est un System.IO.StreamWriter(client)
    writer.WriteLine("coucou le named pipe !")
    writer.Flush()
    Trace(reader.ReadLine())
    client.Close()
    client.Dispose()
    En pièce jointe un exécutable serveur "Pipe" de nom "PipesOfPiece" qui renvoie ce qui lui est envoyé mais en inversant la ligne envoyée :

    Nom : TraceWdNamedPipe.png
Affichages : 116
Taille : 11,6 Ko

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    C'est ce que j'écrivaisais dans mon post #6 : \\.\pipe fait référence à un périphérique de type pipe. De la même manière que \\.\COM1 fait référence à un périphérique branché sur le port COM1
    Bonjour,

    Désolé d'avoie annoncé une ânerie.

    En tout cas, le code de l'excellent JP devrait pas mal aider.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2024
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2024
    Messages : 37
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci à tous,
    merci beaucoup de votre aide, mais je pense ne pas être assez compétent pour résoudre ce problème. En tout cas j’ai beaucoup appris grâce à vous, merci

  17. #17
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Ajoute l'assemblage dotnet systemcore à ton projet et teste le code de JP.

    Ensuite, tu pourras l'adapter (le code, pas JP) pour attaquer ta balance puis ton afficheur.

    Citation Envoyé par sebflow1 Voir le message
    Bonjour et merci à tous,
    merci beaucoup de votre aide, mais je pense ne pas être assez compétent pour résoudre ce problème. En tout cas j’ai beaucoup appris grâce à vous, merci
    C'est en résolvant des gros problèmes comme celui-ci que l'on progresse...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

Discussions similaires

  1. Etablir une connexion entre deux applications Java
    Par ParkLamia dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 29/02/2016, 11h06
  2. Réponses: 4
    Dernier message: 02/11/2011, 09h43
  3. Réponses: 4
    Dernier message: 13/10/2010, 14h11
  4. Réponses: 17
    Dernier message: 04/09/2010, 19h57

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