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

Windows Discussion :

winsock2.h et gtk+ problème structure


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut winsock2.h et gtk+ problème structure
    Bonjour,

    Alors voilà, j'essaie de faire un chat multi-clients graphique en C.
    J'ai déjà fait plusieurs petits programmes utilisant les sockets et tous fonctionnent normalement sous Windows avec la librairie winsock2.h .
    De même j'ai déjà un peu testé gtk+ sans aucun soucis. Mais là, je ne comprends pas... Mon programme fonctionne très bien si je n'inclue pas winsock2.h et à partir du moment ou je l'inclue j'ai une étrange erreur (que je n'avais pas sur les autres programmes).

    Voici l'erreur ou plutôt les erreurs :

    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
    
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|22|warning: useless storage class specifier in empty declaration|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c||In function 'main':|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|35|error: expected '{' before ';' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|35|error: two or more data types in declaration specifiers|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|54|error: expected '{' before '.' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|57|error: expected '{' before '.' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|58|error: expected '{' before '.' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|59|error: expected '{' before '.' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|60|error: expected '{' before '.' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|63|error: expected '{' before '.' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|63|error: expected expression before ')' token|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|63|warning: type defaults to 'int' in declaration of 'type name'|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|67|error: expected expression before 'struct'|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c||In function 'testPseudo':|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|87|error: expected identifier or '(' before 'struct'|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|88|error: expected expression before 'struct'|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|89|error: expected expression before 'struct'|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|90|error: expected expression before 'struct'|
    C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|91|warning: initialization discards qualifiers from pointer target type|
    ||=== Build finished: 14 errors, 3 warnings ===|
    C'est comme si j'avais fait une erreur de syntaxe alors que non... J'ai bien vérifié et en plus de ça, si je n'inclue pas winsock2.h je n'ai aucun soucis de compilation.

    Et mon code :

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include "compatibilite.h"
    #define PORT 4149
    #define TAILLE_MAX_BUFFER 500
    #define TAILLE_MAX_NOM 20
    
    void testPseudo(GtkWidget *widget, gpointer data);
    
    typedef struct Interface_s Interface_s;
    static struct Interface_s{
    
        GtkWidget *fenetrePseudo;
        GtkWidget *textBoxPseudo;
        GtkWidget *boutonContinuer;
        GtkWidget *boutonQuitter;
        GtkWidget *fenetrePrincipale;
        char *text;
    };
    
    int main (int argc, char ** argv)
    {
        #if defined (WIN32)
            WSADATA WSAData;
            int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
        #else
            int erreur = 0;
        #endif
    
        if(!erreur){
    
            Interface_s interface;
            GtkBuilder  *builder   = NULL;
            GError      *p_err       = NULL;
    
           ///// Initialisation de GTK+ /////
           gtk_init (&argc, &argv);
    
    
           ///// Creation d'un nouveau GtkBuilder /////
           builder = gtk_builder_new();
    
           if (builder != NULL)
           {
              ///// Chargement du XML dans builder /////
              gtk_builder_add_from_file(builder, "interface.xml", &p_err);
    
                if (p_err == NULL)
                {
                    ///// Recuparation des pointeurs sur window1 (fenetrePrincipale). /////
                    interface.fenetrePrincipale = (GtkWidget*)gtk_builder_get_object(builder, "window1");
    
                    ///// Recuparation des pointeurs sur dialog1 (fenetrePseudo). /////
                    interface.fenetrePseudo = (GtkWidget*)gtk_builder_get_object(builder, "dialog1");
                    interface.boutonContinuer = (GtkWidget*)gtk_builder_get_object(builder, "button2");
                    interface.boutonQuitter = (GtkWidget*)gtk_builder_get_object(builder, "button3");
                    interface.textBoxPseudo = (GtkWidget*)gtk_builder_get_object(builder, "entry2");
    
                    ///// Signal bouton Continuer de fenetrePseudo /////
                    g_signal_connect(GTK_OBJECT(interface.boutonContinuer), "clicked", G_CALLBACK(testPseudo), (gpointer)&interface);
                    ///// Signal bouton Quitter de fenetrePseudo /////
                   // g_signal_connect(GTK_OBJECT(interface.boutonQuitter), "clicked", G_CALLBACK(continuerChat), (gpointer)&interface);
    
                    gtk_widget_show_all(interface.fenetrePseudo);
                    gtk_main ();
                }
                else
                {
                    ///// Affichage du message d'erreur de GTK+ /////
                    g_error ("%s", p_err->message);
                    g_error_free (p_err);
                }
            }
        }
    
         #if defined (WIN32)
            WSACleanup();
        #endif
    
        return EXIT_SUCCESS;
    }
    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
    #if defined (WIN32)
        #include <winsock2.h>
        typedef int socklen_t;
    #elif defined (linux)
        #include <sys/types.h>
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        #include <unistd.h>
        #define INVALID_SOCKET -1
        #define SOCKET_ERROR -1
        #define closesocket(s) close(s)
        typedef int SOCKET;
        typedef struct sockaddr_in SOCKADDR_IN;
        typedef struct sockaddr SOCKADDR;
    #endif
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <string.h>²
    #include <gtk/gtk.h>
    Ça fait déjà plusieurs jours que je me casse les dents sur ce problème et je ne vois vraiment pas de solutions.
    Une idée d'où ça peut venir?

    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Je viens de trouver !!

    pour ceux qui rencontrerait le même problème, en fait le mot "interface" doit être un mot réservé par la librairie winsock2.

    J'ai juste remplacé :

    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Interface_s interfaceClient;
    Heureusement que j'ai eu l'idée de changer de nom pour "l’esthétique" car j'y pense jamais à ce genre de truc !
    Ça fait quand même trois jours que j'essaie de comprendre pourquoi ça fonctionne pas !! et par hasard je trouve... Le développement dans toute sa splendeur...

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

Discussions similaires

  1. Problème structure de données
    Par cocol dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 17/04/2008, 13h30
  2. [Gtk#] Problème évenement
    Par goddet dans le forum GTK+
    Réponses: 2
    Dernier message: 17/07/2007, 14h20
  3. Gtk: problème pour passer une structure en paramètres
    Par C_Chaou dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 19/04/2007, 19h29
  4. Réponses: 2
    Dernier message: 09/03/2006, 14h28
  5. [MySQL] problème structure if() et op. comparaison
    Par JACOBS dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/09/2005, 18h50

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