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 :mrgreen: :
Code:
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:
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:
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 :D