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 :

L'héritage de structure sous WinDev


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut L'héritage de structure sous WinDev
    Salut à tous les Pro de WinDev ,

    j'ai codé en C sous labwindows/CVI (compilateur C) une dll qui utilise une structure qui hérite des champs d'une autre structure

    voila le code en c:
    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
    typedef struct Struc_Colonne
    {
    char *Colonne;
    char *Champ;
    }Struc_Colonne;
     
    typedef struct Struc_Ligne
    {
    long nbColonne;
    Struc_Colonne *Colonne;
    }Struc_Ligne;
     
    typedef struct Struc_TableauDeDonnee
    {
    long nbLigne;
    Struc_Ligne *Ligne;
    }Struc_TableauDeDonnee;
     
    Struc_TableauDeDonnee PostgreSQLData;

    sous WinDev le code pour exploiter cette structure est :
    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
    Struc_Colonne est une structure
    Colonne est une chaîne
    Champ est une chaîne
    FIN
     
    Struc_Ligne est une structure
    nbColonne est un entier
    Colonne2 est Struc_Colonne
    FIN
    Struc_TableauDeDonnee est une structure
    nbLigne est un entier
    Ligne2 est Struc_Ligne
    FIN
     
    PostgreSQLData est une Struc_TableauDeDonnee
    mon problème alors !, en C pour récupérer la valeur de la ligne [0] colonne [0] il suffit de récupérer la valeur de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostgreSQLData.Ligne[0].Colonne[0].Colonne;
    sous windev j'ai pas trouver une solution pour récupérer la même valeur ! par contre F1 me dire:

    Limites d'une structure

    L'héritage de structure est interdit : une structure ne peut pas hériter d'une autre structure.
    Il n'est pas possible de restreindre l'accès à un membre d'une structure : tous les membres d'une structure sont publics.

    donc avez-vous une solution ? au je dois modifier ma DLL pour gérer cette limite de windev

    MERCI d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Bonjour,
    Dans le code en C je ne vois pas d'héritage, seulement des déclarations de pointeurs sur des structures.
    S'il y avait héritage, la syntaxe en C serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PostgreSQLData.Colonne
    Or dans le code que tu nous donnes on voit bien que les structures sont imbriquées.

    Concernant la partie en Windev, je dirais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PostgreSQLData.Ligne2.Colonne2.Colonne;
    Par contre je pense que la "traduction" de Windev n'est pas bonne, car la structure résultante ne peut contenir qu'une seule ligne et une seule colonne, donc une seule valeur !

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Points : 1 650
    Points
    1 650
    Par défaut
    Bonjour,

    D'abord vous appelez effectivement ça de l'héritage à tort.
    Ensuite, il faut savoir si le but c'est d'utiliser la DLL avec WinDev (compatibilité de données) ou de faire pareil que la DLL dans WinDev (équivalence des structures).

    1. Compatibilité :
    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
     
    Struc_Colonne est une structure
    	Colonne	est un entier système
    	Champ	est un entier système
    FIN
     
    Struc_Ligne est une structure
    	nbColonne	est un entier
    	Colonne		est un entier système
    FIN
     
    Struc_TableauDeDonnee est une structure
    	nbLigne	est un entier
    	Ligne	est un entier système
    FIN
    Pour lire les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sNomColonne = ChaîneRécupère(stColonne.Colonne, crAdresseASCIIZ)
    Pour écrire les données (temporairement, car l'adresse d'une chaîne peut changer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stColonne.Colonne = &sNomColonne

    2. Equivalence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Struc_Colonne est une structure
    	Colonne	est une chaîne
    	Champ	est une chaîne
    FIN
     
    Struc_Ligne est une structure
    	Colonne	est un tableau local de Struc_Colonne
    FIN
     
    Struc_TableauDeDonnee est une structure
    	Ligne	est un tableau local de Struc_Ligne
    FIN
    Sauf qu'une structure à 1 membre c'est pas très utile, mais il n'y a pas de typedef en WinDev.

    Post scriptum :

    J'ai fait un essai pour voir si WinDev utilisait des pointeurs sur les données des chaînes, et il le fait. C'était pas évident car il lui faut mettre à jour tous ces pointeurs à chaque réallocation (gros changement de taille par exemple). Après, j'imagine qu'en (Pointeur - 4) il y a un pointeur vers l'objet lui-même.

    Bref, ce code est donc compatible avec la DLL, et plus simple à utiliser à condition que ça soit uniquement WinDev qui crée les chaînes :
    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
     
    Struc_Colonne est une structure
    	Colonne	est une chaîne
    	Champ	est une chaîne
    FIN
     
    Struc_Ligne est une structure
    	nbColonne	est un entier
    	Colonne		est un entier système
    FIN
     
    Struc_TableauDeDonnee est une structure
    	nbLigne	est un entier
    	Ligne	est un entier système
    FIN
    Pour lire les tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tabLignes est un tableau de Struc_Ligne
    Dimension(tabLignes, stDonnées.nbLigne)
    Transfert(&tabLignes, stDonnées.Ligne, TableauInfo(tabLignes, tiTailleTotale)
    Pour écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    stDonnées.nbLigne = TableauOccurrence(tabLignes)
    stDonnées.Ligne = &tabLignes

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bonjour tatayo, Bonjour Hibernatus34,

    MERCI toutes les deux pour vos réponses

    Avant tous je dois préciser quelques informations pour que les choses soient bien claires :
    1 : Je code essentiellement en C sous Labwindows/CVI 8.5.1, et en C++ sous Microsoft Visual C++ V6.0
    2 : je suis novice en matière de WinDev et j’ai à ma disposition la version 10 de WD

    @tatayo
    Le PostgreSQLData.Ligne2.Colonne2.Colonne; ne sert a rien en WinDev si je ne me trompe pas c’est une déclaration C et pas WD non ?

    @Hibernatus34
    Merci pour les précisions et pour les bouts de codes aussi
    1. mon but est d’utiliser la DLL sous WD sans modification déjà la dll utilisé sous une appli labwindows depuis 2 ans sans doute.
    2. je cherche pas à exploiter la colonne0,ligne0 seulement non pas du tout, mon but est de récupérer toutes les données renvoyer par la dll dans la structure Struc_TableauDeDonnee.
    Par exemple :
    J’ai une table test avec trois champs nom,prenom,mail
    Je lance la requête Le résultat de la requête est alors dans le structure Struc_TableauDeDonnee renvoyer par ma DLL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test1 TEST1 <a href="mailto:test1@wd.com">test1@wd.com</a>
    test2 TEST2 <a href="mailto:test2@wd.com">test2@wd.com</a>
    En C pour récupérer toutes les données il suffit d’écrire ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Char n1[100],n2[100],n3[100];
    Char p1[100],p2[100],p3[100];
    Char m1[100],m2[100],m3[100];
     
    strcpy(n1,PostgreSQLData.Ligne[0].Colonne[0].Colonne);
    strcpy(p1,PostgreSQLData.Ligne[0].Colonne[1].Colonne);
    strcpy(m1,PostgreSQLData.Ligne[0].Colonne[2].Colonne);
     
    strcpy(n2,PostgreSQLData.Ligne[1].Colonne[0].Colonne);
    strcpy(p2,PostgreSQLData.Ligne[1].Colonne[1].Colonne);
    strcpy(m2,PostgreSQLData.Ligne[1].Colonne[2].Colonne);
    En résume je cherche à faire la même chose sous WinDev 10 (donc pas de entier système dans WD10 c’est pour la WD16 non ?)

    MERCI d’avance pour l’aide, pour la disponibilité.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    J'avais indiqué le code en question juste pour appuyer el fait qu'il n'y a pas d'héritage.
    Avec mes maigres reste de C, je dirai que la traduction serait:
    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
     
    Struc_Colonne est une structure
    Colonne est une chaîne
    Champ est une chaîne
    FIN
     
    Struc_Ligne est une structure
    nbColonne est un entier
    Colonne2 est tableau dynamique de Struc_Colonne
    FIN
    Struc_TableauDeDonnee est une structure
    nbLigne est un entier
    Ligne2 est tableau dynamique de Struc_Ligne
    FIN
     
    PostgreSQLData est une Struc_TableauDeDonnee
    NbLigne et NbColonne indiquant la taille respective des tableaux.
    A vérifier quand même...

    Tatayo.

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Salut tatayo,

    MERCI pour la réactivité

    le compilateur wd10 à renvoyer l'erreur "Ligne incomplète" pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Colonne2 est tableau dynamique de Struc_Colonne
    et aussi pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ligne2 est tableau dynamique de Struc_Ligne
    comment je récupérer les pour une ligne (bout de code SP) on prend la meme exemple ci-dessus (de la table test) ?

    Cordialement

  7. #7
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Points : 1 650
    Points
    1 650
    Par défaut
    Citation Envoyé par nouri_t Voir le message
    2. je cherche pas à exploiter la colonne0,ligne0 seulement non pas du tout, mon but est de récupérer toutes les données renvoyer par la dll dans la structure Struc_TableauDeDonnee.
    Ça ne change rien, WinDev ne peut pas gérer des pointeurs comme en C et y accéder comme à des tableaux, ça serait du code "unsafe".
    Donc vous devez utiliser les structures que je vous ai données, pour la compatibilité entre la DLL et WinDev (il faut que ça ait la même disposition en mémoire).
    Donc :
    1. Déclarer les structures de mon dernier bout de code (c'est pour les passer directement aux fonctions de la DLL)
    2. Créer des fonctions pour transformer ça en tableaux WinDev (comme expliqué à la toute fin de mon message), vous pourriez transformer les structures entières, cf. mon code "équivalent".

    Il faudra donc que votre code convertisse vos tableaux C en tableaux WinDev et vice versa pour permettre les échanges.
    Vous pourriez développer des classes sous WinDev, permettant de masquer tout ça de façon plus élégante, ça dépend de ce que vous en ferez.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Oups, effectivement c'est la syntaxe utilisée en version 15, je n'avais pas vu que tu utilises encore la 10...
    Pour la 10, il faut obligatoirement la taille du tableau dynamique:
    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
    Struc_Colonne est une structure
    	sColonne est une chaîne
    	sChamp est une chaîne
    FIN
    
    Struc_Ligne est une structure
    	nNbColonne est un entier
    	tabColonne2 est tableau dynamique de 0 Struc_Colonne
    FIN
    Struc_TableauDeDonnee est une structure
    	nNbLigne est un entier
    	tabLigne2 est tableau dynamique de 0 Struc_Ligne
    FIN
    
    
    gstPostgreSQLData est une Struc_TableauDeDonnee
    Tatayo.

  9. #9
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Points : 1 650
    Points
    1 650
    Par défaut
    Tatayo : ça ne marchera pas, ce n'est pas binairement compatible avec sa DLL.
    D'ailleurs, WD15 fait un avertissement si on essaie de faire ça.

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Salut à tous,

    MERCI pour vos réponse

    je teste tout ca demain et je vous tiens au courant, par contre le compilateur WD10 ne connait pas le type entier système !, est-ce que je dois le remplacer par entier ?


    Cordialement


  11. #11
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    ici vous trouvez le bout de mon code WD10, excusez-moi mais j'arrive pas à bien exploiter vos code
    j'ai modifié le type entier système par entier, je code avec la version 10 de WD

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Inst,status,iNbLigne est un entier
    TestId est un booléen
    conninfo,codesql,tempbuff est chaîne
     
    Struc_Colonne est une structure
    	Colonne	est une chaîne
    	Champ	est une chaîne
    FIN
     
    Struc_Ligne est une structure
    	nbColonne	est un entier
    	Colonne		est un entier
    FIN
     
    Struc_TableauDeDonnee est une structure
    	nbLigne	est un entier
    	Ligne	est un entier 
    FIN
     
    stDonnées est une Struc_TableauDeDonnee
    tabLignes est un tableau de 0 Struc_Ligne
     
    conninfo = "hostaddr = '127.0.0.1' port = '5432' dbname = 'test_lib_pg' user = 'postgres' password = 'postgres'"
     
    hwnd est un entier = Handle(FenetrePrincipale)
     
    Inst = ChargeDLL("LibraryTracaPostgreSQL.dll")
    SI (Inst = 0) ALORS
     
    	Erreur("LibraryTracaPostgreSQL.dll introuvable ou problème d'initialisation de cette librairie.....")
    	Ferme()
    FIN
     
    TestId  = AppelDLL32("LibraryTracaPostgreSQL","PostgreSQL_Connect",&conninfo,hwnd)
     
    SI TestId <> 0 ALORS
    	TitreSuivant("Erreur PostgreSQL")	
    	Erreur("Problème connexion à la base de données PG code Erreur : " +TestId)
    	Ferme
    FIN
     
    //connexion à la base pg ok
    codesql = "SELECT matricule_cin,nom,prenom,phone,mail,adresse,datecreation FROM personnes  ORDER BY id_personne ASC;"
    status  = AppelDLL32("LibraryTracaPostgreSQL","PostgreSQL_Query",&codesql,&iNbLigne,1,&stDonnées ,1)
     
    SI ( status <> 0)  ALORS
     
    	Erreur("Une erreur a été détectée pendant la récupération des données.")	
    END
     
    Dimension(tabLignes, stDonnées:nbLigne)
    Transfert(&tabLignes, stDonnées:nbLigne, TableauInfo(tabLignes, tiTailleTotale))
    //code pour afficher par exemple la valeur de tabLignes[0,0]
    //info("nombre des colonnes " +tabLignes[0])
    avez-vous un bout de code qui permet d'afficher tous les données renvoyer par la dll dans un trace par exemple ?

    MERCI pour l'aide et ne le prenez pas mal, e suis novice en WD


  12. #12
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Points : 1 650
    Points
    1 650
    Par défaut
    Je vous ai dit une bêtise, le type chaîne marchera uniquement si c'est WinDev qui crée les chaînes. Je vois que ce n'est pas le cas, donc il faut utiliser un type entier et ChaîneRécupère.
    De plus, attention à la lecture d'un tableau, si c'est un tableau de structures avec des pointeurs dedans, il faut ensuite reconstruire les structures une à une.
    Enfin, un entier système correspond à une entier tout court en 32 bits, et à un entier sur 8 en 64 bits.

    Voici un code plus complet (non garanti de fonctionner, à vous de corriger mes oublis) :
    1. Déclarations :
    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
    24
    25
    26
    27
    28
     
    Struc_Colonne est une structure
    	Colonne	est une chaîne
    	Champ	est une chaîne
    FIN
     
    Struc_Ligne est une structure
    	tabColonne	est un tableau local de Struc_Colonne
    FIN
     
    Struc_TableauDeDonnee est une structure
    	tabLigne	est un tableau local de Struc_Ligne
    FIN
     
    Struc_Colonne_C est une structure
    	Colonne	est un entier // système
    	Champ	est un entier // système
    FIN
     
    Struc_Ligne_C est une structure
    	nbColonne	est un entier
    	Colonne		est un entier // système
    FIN
     
    Struc_TableauDeDonnee_C est une structure
    	nbLigne		est un entier
    	Ligne		est un entier // système
    FIN
    2. Fonction qui convertit la structure C en structure WD :
    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
     
    PROCEDURE CVersWD(stDonnéesWD est Struc_TableauDeDonnee, stDonnéesC est Struc_TableauDeDonnee_C)
    tabLignes	est un tableau de Struc_Ligne_C
    tabColonnes	est un tableau de Struc_Colonne_C
    stLigne		est Struc_Ligne
    stColonne	est Struc_Colonne
    i, j		sont des entiers
     
    TableauSupprimeTout(stDonnéesWD:tabLigne)
    Dimension(tabLignes, stDonnéesC:nbLigne)
    Transfert(&tabLignes, stDonnéesC:Ligne, TableauInfo(tabLignes, tiTailleTotale))
    POUR i = 1 _A_ TableauOccurrence(tabLignes)
    	TableauSupprimeTout(stLigne:tabColonne)
    	Dimension(tabColonnes, tabLignes[i]:nbColonne)
    	Transfert(&tabColonnes, tabLignes[i]:Colonne, TableauInfo(tabColonnes, tiTailleTotale))
    	POUR j = 1 _A_ TableauOccurrence(tabColonnes)
    		stColonne:Champ = ChaîneRécupère(tabColonnes[j]:Champ, crAdresseASCIIZ)
    		stColonne:Colonne = ChaîneRécupère(tabColonnes[j]:Colonne, crAdresseASCIIZ)
    		TableauAjoute(stLigne:tabColonne, stColonne)
    	FIN
    	TableauAjoute(stDonnéesWD:tabLigne, stLigne)
    FIN
    3. Appel de la fonctions dans la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    stDonnéesC est un Struc_TableauDeDonnee_C
    stDonnées est un Struc_TableauDeDonnee
    API("LibraryTracaPostgreSQL","PostgreSQL_Query",&codesql,&iNbLigne,1,&stDonnéesC,1)
    CVersWD(stDonnées, stDonnéesC)

Discussions similaires

  1. Client Telnet sous WinDev
    Par nabmed dans le forum WinDev
    Réponses: 10
    Dernier message: 21/01/2015, 18h24
  2. DLL et réel sous windev
    Par fabpeden dans le forum WinDev
    Réponses: 2
    Dernier message: 28/03/2007, 11h14
  3. Faire ne analyse sous windev
    Par zibobo dans le forum WinDev
    Réponses: 2
    Dernier message: 23/03/2007, 20h34
  4. Quel SGBD pour mon outil sous windev ?
    Par Davboc dans le forum Décisions SGBD
    Réponses: 20
    Dernier message: 21/09/2006, 20h48
  5. PB de tables créées sous Windev
    Par Reynald dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/04/2004, 10h22

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