Problème header

Résolu
Bonjour,
J'ai toujours eu de problèmes avec les headers, et je m'en suis toujours sorti "à l'arrache", mais là, je n'ai pas vraiment le choix, et ca me pose vraiment problème, ce que je vais vous expliquer de suite:
Je veux qu'une variable de type gchar* soit partagé entre mes fichiers.
J'ai donc dans mon fichier main:
#include "generateur.c"

dans mon fichier generateur.c:
#include "generateur.h"

et dans mon generateur.h (entre autres):
extern gchar* cheminFichierFil;


Mais quand je veux changer la valeur de mon cheminFichierFil dans mon fichier main, le compilateur me dis que cheminFichierFil n'est pas déclaré ...

Je vous supplie donc de m'aider parce que les headers et moi sommes en guerre depuis mes débuts.
Merci d'avance,
Sheeps.

34 réponses

Résumé de la discussion

Le problème central est le partage d'une variable de type gchar* entre plusieurs fichiers C via extern, alors que le compilateur signale une non-déclaration lorsque la variable est modifiée depuis main. Des extern dans le header générateur.h et une définition unique de la variable dans un fichier C, avec l'inclusion du header dans chaque fichier source, permet d'éviter les erreurs de liaison et les redéfinitions. La recommandation clé est d'inclure le header approprié dans le fichier principal avant d'utiliser le fichier .c correspondant et de ne pas inclure directement un .c. D'autres éléments de contexte ont été évoqués, comme corriger les définitions dans generateur.c et vérifier que la variable n'est pas redéfinie dans main.cpp.

Bobot (l’IA à votre service)
  1. bonjour,

    Pourrais tu mettre ton .h et ton .c car peut être que tu as un autre soucis, surtout le .h car je me pose des questions il faudrait que je vois le code
    1. C'est un peu long je te préviens, surtout pour le .c:

      Le generateur.h:
      #include <stdlib.h>
      #include <gtk/gtk.h>
      #include <stdio.h>
      #include <string.h>
      #define TAILLE_MAX 1000
      #define TAILLE_MAX_PETIT 20
      extern char chaine[TAILLE_MAX];
      
      
      //********************************************************************************
      //Partie interface
      //********************************************************************************
          //paramètres d'isolement
              typedef struct
              {
                  const gchar* Iso1;
                  const gchar* Iso2;
                  const gchar* Iso3;
                  const gchar* Iso4;
                  const gchar* Iso5;
              } Isolement;
      
              Isolement isolement;
      
          //paramètres de continuité
              typedef struct
              {
                  const gchar* Conti1;
                  const gchar* Conti2;
                  const gchar* Conti3;
                  const gchar* Conti4;
                  const gchar* Conti5;
              } Continuite;
      
              Continuite continuite;
      
      
          //Génère le code du programme winpass
          void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf,
                                   Continuite continuite, Isolement isolement);
      
      //********************************************************************************
      //partie générateur
      //********************************************************************************
      
          //retourne le nombre de lignes d'un fichier
          int tailleLignesFichier (FILE* fichier);
      
          //enregistrement d'une connection
          typedef struct
          {
              char nomConnecteur[TAILLE_MAX_PETIT];
              char contact[TAILLE_MAX_PETIT];
          } connection;
      
          //création du type qui savegardera les connections
          typedef connection typeTableauConnection [TAILLE_MAX];
      
          //enregistrement d'une définition de connecteur
          typedef struct
          {
              char nomConnecteur[TAILLE_MAX_PETIT];
              char typeConnecteur[TAILLE_MAX_PETIT];
          } defConnection;
      
          //création du type qui savegardera les définition des connecteurs
          typedef defConnection typeTableauDefinitionConnecteur [TAILLE_MAX];
      
          //traitement d'un fichier des connections de type fichier.FIL
          int traitementFichierDesConnections (char * nomFichierFil, typeTableauConnection tableauConnection);
      
          //traitement d'un fichier des définition de connecteurs de type fichier.PRF
          int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur);
      
      


      Le generateur.c:
      #include "generateur.h"
      
      int traitementFichierDesConnections(char * cheminFichierFil, typeTableauConnection tableauConnections);
      
      
      void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf,
                               Continuite continuite, Isolement isolement)
      {
          FILE* fichierTest = fopen("test", "w+");
          cheminFichierFil = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.FIL",
                                               -1, NULL, NULL, NULL);
          cheminFichierPrf = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.PRF",
                                               -1, NULL, NULL, NULL);
      //***********************************************************************************************************
      //fichier FIL
      //***********************************************************************************************************
          int nb_connections;
              typeTableauConnection tableauConnections;
              nb_connections = traitementFichierDesConnections(cheminFichierFil, tableauConnections);
      
          int i;
          for(i = 0; i < nb_connections; i++)
              {
                  fprintf(fichierTest,"\n%s : %s",tableauConnections[i].nomConnecteur, tableauConnections[i].contact);
              }
      //***********************************************************************************************************
      //fichier PRF
      //***********************************************************************************************************
          typeTableauDefinitionConnecteur tableauDefinitionConnecteur;
          int ligneligne = traitementFichierDefinitionConnecteurs(cheminFichierPrf, tableauDefinitionConnecteur);
      
              int it;
              fprintf(fichierTest,"\n\ndescription des connecteurs : \n");
              for(it = 0; it < ligneligne; it++)
              {
                  fprintf(fichierTest,"\n%s : %s",tableauDefinitionConnecteur[it].nomConnecteur, tableauDefinitionConnecteur[it].typeConnecteur);
              }
      
      
      
          int fclose(FILE* fichierTest);
      
      
          //****************************************************************
          //Affichage du message de succès de la génération du fichier
          //****************************************************************
              GtkWidget* FenetreGeneration = NULL;
              GtkWidget* tableGen = NULL;
              GtkWidget* LabelSucces = NULL;
                  gchar* TexteSucces = NULL;
              GtkWidget* BoutonOK = NULL;
      
             FenetreGeneration = gtk_dialog_new();
             tableGen = gtk_table_new(2, 6, TRUE);
             gtk_window_set_title(GTK_WINDOW(FenetreGeneration), "Generation accomplie");
      
             TexteSucces =g_locale_to_utf8( "Génération du fichier accomplie avec succès", -1, NULL, NULL, NULL);
             LabelSucces = gtk_label_new (TexteSucces);
             gtk_table_attach_defaults(GTK_TABLE(tableGen), LabelSucces, 1, 5, 0, 1);
      
             BoutonOK = gtk_button_new_with_label("OK");
             gtk_signal_connect_object (GTK_OBJECT (BoutonOK), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), FenetreGeneration);
             gtk_table_attach_defaults(GTK_TABLE(tableGen), BoutonOK, 2, 4, 1, 2);
      
             gtk_container_add (GTK_CONTAINER (GTK_DIALOG(FenetreGeneration)->vbox), tableGen);
             gtk_widget_show_all (FenetreGeneration);
      }
      
      
      //**************************************************************************************************************
      int tailleLignesFichier (FILE* fichier)
      {
      	int taille = 0;
      
      	while( fgets (chaine, TAILLE_MAX, fichier) != NULL)
      	{
      		taille++;
      	}
      	//remise du curseur au début du fichier
      	fseek(fichier, 0, SEEK_SET);
      	return taille;
      }
      
      
      //**************************************************************************************************************
      
      
      int tailleLigneDescConnecteur (FILE* fichier)
      {
          int ligne=0;
          int trouve=0;
          char buffer[TAILLE_MAX];
          while(fgets(buffer, sizeof buffer, fichier))
          {
              ligne++;
              if(strstr(buffer,"EQUIPEMENT DE BASE"))
              {
                  trouve=1;
                  break;
              }
          }
          if(trouve)
          {
              //remise du curseur au début du fichier
              fseek(fichier, 0, SEEK_SET);
              return ligne - 1;
          }
          else
          {
              return 0;
          }
      }
      
      //**************************************************************************************************************
      
      
      
      int traitementFichierDesConnections (char * cheminFichierFil, typeTableauConnection tableauConnections)
      {
      	int iLigne = 0;             //itérateur pour les lignes (vérifier le 1 peut-etre 0)
      	int i = 0;                  //itérateur pour les diférentes connections dans le tableau
      	int j = 0;                  //itérateur pour le nombre de caractère des données récupérées
          int iSaut;                  //itérateur pour sauter les caractères indésirés
          int testPremiereBoucle;     //booléen pour savoir si l'on doit sauter le premier caractère ou non
          char carac;                 //caractère renvoyé par les fputc
      
      
      	//ouverture du fichier en lecture
          FILE* fichierFil = fopen(cheminFichierFil, "r");
          if(fichierFil != NULL)
          {
      
              //test du nombre de lignes
              const int NB_LIGNES = tailleLignesFichier (fichierFil);
              while(iLigne < NB_LIGNES)
          	{
                  //*******************************************
                  //traitement d'une ligne
                  //*******************************************
                  iSaut = 0;
                  testPremiereBoucle = 1;
                  //tant que l'on ne trouvons pas le marqueur de fin de ligne on continue le traitement
                  while((carac=fgetc (fichierFil)) != 10)//10 étant l'entier associé au caractère "retour à la ligne"
                  {
                      j = 0;
                      //on saute les renseignements qui ne nous interresent pas
                      while(iSaut < 10)
                      {
                          carac = fgetc (fichierFil);
                          //on ne valide le saut d'une colonne que lorsque l'on rencontre le caractère "|"
                          if(carac == 124)//124 étant l'entier associé au caractère "|"
                          {
                              iSaut++;
                          }
                      }
      
                      //si il s'agit de la première boucle de la ligne, on doit sauter un dernier caractère
      				if(testPremiereBoucle == 1)
      				{
      					carac = fgetc (fichierFil);
      					testPremiereBoucle = 0;
      				}
      				//on stocke dans le tableau le nom du connecteur
      				while(carac != 47)//47 étant l'entier associé au caractère "/"
      				{
      				    tableauConnections[i].nomConnecteur[j]=carac;
      				    j++;
      					carac = fgetc (fichierFil);
      				}
      				carac = fgetc (fichierFil);
      				j = 0 ;
      				//on stocke dans le tableau le contact
      				while(carac != 124)
      				{
      				    tableauConnections[i].contact[j]=carac;
      				    j++;
      					carac = fgetc (fichierFil);
      				}
      				i++;
                  }
                  iLigne++;
          	}
          }
          else
          {
              printf("\nerreur \x85 l'ouverture du fichier %s", cheminFichierFil);
          }
      
          //fermeture du fichier
          int fclose(FILE* fichierFil);
      
          //on retourne le nombre de connections
          return i;
      }
      
      //**************************************************************************************************************
      
      int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur)
      {
          long iLigne = 0;    //itérateur pour les lignes
          int i = 0;          //itérateur pour les connections
          int j;              //itérateur pour le nombre de caractère des données récupérées
          char carac;         //caractère renvoyé par les fputc
      
          //ouverture du fichier en lecture
          FILE* fichierPrf = fopen(nomFichierPrf, "r");
          if(fichierPrf != NULL)
          {
              //test du nombre de lignes
              const int NB_LIGNES = tailleLigneDescConnecteur(fichierPrf);
              while(iLigne < NB_LIGNES)
              {
                  //*******************************************
                  //traitement d'une ligne
                  //*******************************************
                  if (fgetc (fichierPrf) != 179)
                  {
                      while((fgetc (fichierPrf)) != 10);
                  }
                  else
                  {
                      int iterator;
                      //on saute les caractères intiles
                      for (iterator = 0; iterator < 7; iterator++)
                      {
                          carac = fgetc(fichierPrf);
                      }
                      if(carac == 32)
                      {
                          //ligne vide donc aucun traitement
                      }
                      else
                      {
                          j = 0;
                          while(carac != 32)
                          {
                              //on stocke dans le tableau le nom du connecteur
                              tableauDefinitionConnecteur[i].nomConnecteur[j] = carac;
                              j++;
                              carac = fgetc (fichierPrf);
                          }
                          for (iterator = 0; iterator < 3; iterator++)
                          {
                              //on saute les caractères intiles
                              carac = fgetc (fichierPrf);
                          }
                          j = 0;
                          while(carac != 32)
                          {
                              //on stocke dans le tableau le nom du types du connecteur
                              tableauDefinitionConnecteur[i].typeConnecteur[j] = carac;
                              j++;
                              carac = fgetc (fichierPrf);
                          }
                          i++;
                      }
                      while((fgetc (fichierPrf)) != 10);
                  }
                  iLigne++;
              }
          }
          else
          {
              printf("\nerreur \x85 l'ouverture du fichier %s", nomFichierPrf);
          }
          //fermeture du fichier
          int fclose(FILE* fichierPrf);
      
          //on retourne le nombre de définitions de connecteurs
          return i;
      }
      
      


      et enfin le main.cpp:
      #include "generateur.c"
      //ATTENTION ! ! !
      //chemin du fichier des connections
          //gchar* cheminFichierFil = NULL;
      
      //chemin du fichier des définitions de connecteurs
          gchar* cheminFichierFil = NULL;
          gchar* cheminFichierPrf = NULL;
      
      //Créé la boîte de dialogue nous permettant de sélectionner un fichier.FIL pour récupérer son chemin
      void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil);
          GtkWidget* EntryFil = NULL;       //Entry du chemin du fichier des connections
      
      
      //Créé la boîte de dialogue nous permettant de sélectionner un fichier.PRF pour récupérer son chemin
      void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf);
          GtkWidget* EntryPrf = NULL;       //Entry du chemin du fichier des définitions de connecteurs
      
      
      //Créé la boîte de dialogue nous permettant de modifier les paramètres de continuité
      void TraitementBoutonConti(GtkWidget* pWidget, gpointer data);
      
      
          //entrys des paramètres de continuité
              GtkWidget* EntryConti1= NULL;
              GtkWidget* EntryConti2= NULL;
              GtkWidget* EntryConti3= NULL;
              GtkWidget* EntryConti4= NULL;
              GtkWidget* EntryConti5= NULL;
      
      
      //Créé la boîte de dialogue nous permettant de modifier les paramètres d'isolement
      void TraitementBoutonIso(GtkWidget* pWidget, gpointer data);
      
          //entrys des paramètres d'isolement
              GtkWidget* EntryIso1= NULL;
              GtkWidget* EntryIso2= NULL;
              GtkWidget* EntryIso3= NULL;
              GtkWidget* EntryIso4= NULL;
              GtkWidget* EntryIso5= NULL;
      
      
      //Ferme le programme
      void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale);
      
      int main(int argc,char **argv)
      {
          //Ouverture de la librairie graphique GTK+
          gtk_init(&argc,&argv);
      
          //Glossaire des widgets graphiques
          GtkWidget* FenetrePrincipale = NULL;    //Fenêtre principale
          GtkWidget* frame = NULL;                //Frame principale(faisant toute la fenêtre
          GtkWidget* table = NULL;                //Tableau graphique pour placer les éléments
      
          GtkWidget* LabelBienvenue = NULL;       //Label de présentation
              gchar* TexteBienvenue = NULL;       //Texte associé au label de présentation
          GtkWidget* boxBienvenue = NULL;         //Box contenant l'alignement du label de bienvenue
          GtkWidget* alignementBienvenue = NULL;  //Alignement du label de bienvenue
      
          GtkWidget* LabelFil = NULL;             //Label de renseignement du fichier de connections
              gchar* TexteFil = NULL;             //Texte associé au label de connections
      
          GtkWidget* BoutonFil = NULL;            //Bouton pour sélectionner le fichier de connections
          GtkWidget* boxFil = NULL;               //Box pour contenir l'alignement du bouton de connections
          GtkWidget* alignementFil = NULL;        //Alignement du bouton des connections
      
          GtkWidget* LabelPrf = NULL;             //Label de renseignement de la description des connecteurs
              gchar* TextePrf = NULL;             //Texte associé au label de description
      
          GtkWidget* BoutonPrf = NULL;            //Bouton pour sélectionner le fichier de description
          GtkWidget* boxPrf = NULL;               //Box pour contenir l'alignement du bouton de description
          GtkWidget* alignementPrf = NULL;        //Alignement du bouton de description
      
          GtkWidget* BoutonConti = NULL;            //Bouton pour modifier les paramètres de continuité
              gchar* TexteConti = NULL;             //Texte associé au bouton de continuité
          GtkWidget* boxConti = NULL;               //Box pour contenir l'alignement du bouton de continuité
          GtkWidget* alignementConti = NULL;        //Alignement du bouton de continuité
      
          GtkWidget* BoutonIso = NULL;            //Bouton pour modifier les paramètres d'isolement
              gchar* TexteIso = NULL;             //Texte associé au bouton d'isolement
          GtkWidget* boxIso = NULL;               //Box pour contenir l'alignement du bouton d'isolement
          GtkWidget* alignementIso = NULL;        //Alignement du bouton d'isolement
      
          GtkWidget* BoutonGen = NULL;            //Bouton pour générer le code winpass
              gchar* TexteGen = NULL;             //Texte associé au bouton de génération
          GtkWidget* boxGen = NULL;               //Box pour contenir l'alignement du bouton de génération
          GtkWidget* alignementGen = NULL;        //Alignement du bouton de génération
      
          GtkWidget* BoutonClose = NULL;          //Bouton pour fermer le programme
          GtkWidget* boxClose = NULL;             //Box pour contenir l'alignement du bouton de fermeture
          GtkWidget* alignementClose = NULL;      //Alignement du bouton de fermeture
      
          //initialisation des paramètres de continuité
              continuite.Conti1 = "default";
              continuite.Conti2 = "default";
              continuite.Conti3 = "default";
              continuite.Conti4 = "default";
              continuite.Conti5 = "default";
      
          //initialisation des paramètres d'isolement
              isolement.Iso1 = "default";
              isolement.Iso2 = "default";
              isolement.Iso3 = "default";
              isolement.Iso4 = "default";
              isolement.Iso5 = "default";
      
          //initialisation du chemin des fichiers
          gchar* InitChemin =g_locale_to_utf8( "Chemin du fichier...", -1, NULL, NULL, NULL);
          cheminFichierFil = InitChemin;
          cheminFichierPrf = InitChemin;
      
          //******************************************************************************************
          // Création de la fenêtre
          //******************************************************************************************
              FenetrePrincipale = gtk_window_new(GTK_WINDOW_TOPLEVEL);
              g_signal_connect(G_OBJECT(FenetrePrincipale), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
      
              //Titre de la fenêtre
              gtk_window_set_title(GTK_WINDOW(FenetrePrincipale), "Generateur de code Winapss5000");
      
              //Taille de la fenêtre
              gtk_window_set_default_size(GTK_WINDOW(FenetrePrincipale), 700, 500);
      
              //Positionnement de la fenêtre
              gtk_window_set_position(GTK_WINDOW(FenetrePrincipale),GTK_WIN_POS_CENTER);
      
          //******************************************************************************************
          // Création de la hiérarchie graphique de la fenêtre
          //******************************************************************************************
              frame = gtk_frame_new ("");
              table = gtk_table_new(8, 6, TRUE);
              gtk_container_add (GTK_CONTAINER (frame), table);
      
              //***************************************************
              //Label de bienvenue
              //***************************************************
                  //Formalisation du texte
                  TexteBienvenue = g_locale_to_utf8( "<span size=\"xx-large\"><b>Générateur Winapass5000</b></span>",
                                                    -1, NULL, NULL, NULL);
                  //Création du label
                  LabelBienvenue = gtk_label_new(TexteBienvenue);
      
                  //Libération de la mémoire
                  g_free(TexteBienvenue);
      
                  //Formalisation grâce aux balises pango
                  gtk_label_set_use_markup(GTK_LABEL(LabelBienvenue), TRUE);
      
                  //Création de la box pour contenir l'alignement du label
                  boxBienvenue = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du label
                  alignementBienvenue = gtk_alignment_new(0.5, 0, 0, 0);
      
                  //Hiérarchie des composants graphiques pour le label de bienvenue
                  gtk_container_add (GTK_CONTAINER(alignementBienvenue), LabelBienvenue);
                  gtk_container_add (GTK_CONTAINER (boxBienvenue), alignementBienvenue);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxBienvenue, 0, 6, 0, 1 );
      
              //***************************************************
              //Label de renseignement du fichier de connections
              //***************************************************
                  //Formalisation du texte
                  TexteFil = g_locale_to_utf8( "Veuillez renseigner le fichier de connections (fichier.FIL) :",
                                              -1, NULL, NULL, NULL);
                  //Création du label
                  LabelFil = gtk_label_new(TexteFil);
      
                  //Libération de la mémoire
                  g_free(TexteFil);
      
                  //Placement du label dans le tableau
                  gtk_table_attach_defaults(GTK_TABLE(table), LabelFil, 0, 4, 1, 2);
      
              //***************************************************
              //Bouton de renseignement du fichier de connections
              //***************************************************
                  //Création du bouton
                  BoutonFil = gtk_button_new_with_mnemonic("Parcourir");
      
                  //Création de la box pour contenir l'alignement du bouton
                  boxFil = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du bouton
                  alignementFil = gtk_alignment_new(0, 0.5, 0, 0);
      
                  //Hiérarchie des composants graphiques
                  gtk_container_add (GTK_CONTAINER(alignementFil), BoutonFil);
                  gtk_container_add (GTK_CONTAINER (boxFil), alignementFil);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxFil, 4, 5, 1, 2);
      
                  //Ecoute du bouton
                  g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                  g_signal_connect(G_OBJECT(BoutonFil), "clicked", G_CALLBACK(TraitementBoutonFil), NULL);
      
              //***************************************************
              //Entry du chemin du fichier de connections
              //***************************************************
                  //Création de l'entry
                  EntryFil = gtk_entry_new();
      
                  //initialisation du texte de l'entry
                  gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil);
      
                  //Placement de l'entry dans le tableau
                  gtk_table_attach_defaults(GTK_TABLE(table), EntryFil, 1, 5, 2, 3);
      
              //************************************************************
              //Label de renseignement du fichier de définition connecteurs
              //************************************************************
                  //Formalisation du texte
                  TextePrf = g_locale_to_utf8("Veuillez renseigner le fichier de définition des connecteurs (fichier.PRF) :",
                                              -1, NULL, NULL, NULL);
                  //Création du label
                  LabelPrf = gtk_label_new(TextePrf);
      
                  //Libération de la mémoire
                  g_free(TextePrf);
      
                  //Placement du label dans le tableau
                  gtk_table_attach_defaults(GTK_TABLE(table), LabelPrf, 0, 4, 3, 4);
      
              //*************************************************************
              //Bouton de renseignement du fichier de définition connecteurs
              //*************************************************************
                  //Création du bouton
                  BoutonPrf = gtk_button_new_with_mnemonic("Parcourir");
      
                  //Création de la box pour contenir l'alignement du bouton
                  boxPrf = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du bouton
                  alignementPrf = gtk_alignment_new(0, 0.5, 0, 0);
      
                  //Hiérarchie des composants graphiques
                  gtk_container_add (GTK_CONTAINER(alignementPrf), BoutonPrf);
                  gtk_container_add (GTK_CONTAINER (boxPrf), alignementPrf);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxPrf, 4, 5, 3, 4);
      
                  //Ecoute du bouton
                  g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                  g_signal_connect(G_OBJECT(BoutonPrf), "clicked", G_CALLBACK(TraitementBoutonPrf), NULL);
      
              //*************************************************************
              //Entry du chemin du fichier de définition connecteurs
              //*************************************************************
                  //Création de l'entry
                  EntryPrf = gtk_entry_new();
      
                  //initialisation du texte de l'entry
                  gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf);
      
                  //Placement de l'entry dans le tableau
                  gtk_table_attach_defaults(GTK_TABLE(table), EntryPrf, 1, 5, 4, 5);
      
              //*************************************************************
              //Bouton de paramètre de continuité
              //*************************************************************
                  //Création du bouton
                  TexteConti = g_locale_to_utf8("Paramètres de continuité",-1, NULL, NULL, NULL);
                  BoutonConti = gtk_button_new_with_label(TexteConti);
      
                  //Création de la box pour contenir l'alignement du bouton
                  boxConti = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du bouton
                  alignementConti = gtk_alignment_new(0, 0.5, 0.5, 0);
      
                  //Hiérarchie des composants graphiques
                  gtk_container_add (GTK_CONTAINER(alignementConti), BoutonConti);
                  gtk_container_add (GTK_CONTAINER (boxConti), alignementConti);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxConti, 2, 5, 5, 6);
      
                  //Ecoute du bouton
                  g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                  g_signal_connect(G_OBJECT(BoutonConti), "clicked", G_CALLBACK(TraitementBoutonConti), NULL);
      
              //*************************************************************
              //Bouton de paramètre d'isolement
              //*************************************************************
                  //Création du bouton
                  TexteIso = g_locale_to_utf8("Paramètres d'isolement",-1, NULL, NULL, NULL);
                  BoutonIso = gtk_button_new_with_label(TexteIso);
      
                  //Création de la box pour contenir l'alignement du bouton
                  boxIso = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du bouton
                  alignementIso = gtk_alignment_new(0, 0.5, 0.5, 0);
      
                  //Hiérarchie des composants graphiques
                  gtk_container_add (GTK_CONTAINER(alignementIso), BoutonIso);
                  gtk_container_add (GTK_CONTAINER (boxIso), alignementIso);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxIso, 2, 5, 6, 7);
      
                  //Ecoute du bouton
                  g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                  g_signal_connect(G_OBJECT(BoutonIso), "clicked", G_CALLBACK(TraitementBoutonIso), NULL);
      
              //*************************************************************
              //Bouton de génération du code winpass
              //*************************************************************
                  //Création du bouton
                  TexteGen = g_locale_to_utf8("Générer",-1, NULL, NULL, NULL);
                  BoutonGen = gtk_button_new_with_label(TexteGen);
      
                  //Création de la box pour contenir l'alignement du bouton
                  boxGen = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du bouton
                  alignementGen = gtk_alignment_new(0, 0.5, 0.5, 0);
      
                  //Hiérarchie des composants graphiques
                  gtk_container_add (GTK_CONTAINER(alignementGen), BoutonGen);
                  gtk_container_add (GTK_CONTAINER (boxGen), alignementGen);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxGen, 4, 5, 7, 8);
      
                  //Ecoute du bouton
                  g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                  g_signal_connect(G_OBJECT(BoutonGen), "clicked", G_CALLBACK(TraitementBoutonGen), NULL);
      
              //*************************************************************
              //Bouton de fermeture du programme
              //*************************************************************
                  //Création du bouton
                  BoutonClose = gtk_button_new_with_label("Fermer");
      
                  //Création de la box pour contenir l'alignement du bouton
                  boxClose = gtk_vbox_new(TRUE, 1);
      
                  //Création de l'alignement du bouton
                  alignementClose = gtk_alignment_new(0, 0.5, 0.5, 0);
      
                  //Hiérarchie des composants graphiques
                  gtk_container_add (GTK_CONTAINER(alignementClose), BoutonClose);
                  gtk_container_add (GTK_CONTAINER (boxClose), alignementClose);
                  gtk_table_attach_defaults(GTK_TABLE(table), boxClose, 5, 6, 7, 8);
      
                  //Ecoute du bouton
                  g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                  g_signal_connect(G_OBJECT(BoutonClose), "clicked", G_CALLBACK(TraitementBoutonClose), FenetrePrincipale);
      
              //***************************************************
              //Ajout des composants dans la fenêtre et affichage
              //***************************************************
                  gtk_container_add(GTK_CONTAINER(FenetrePrincipale),frame);
                  gtk_widget_show_all(FenetrePrincipale);
      
          gtk_main();
          return EXIT_SUCCESS;
      }
      
      //****************************************************************************
      //Traitement du bouton "Parcourir" du fichier de connections
      //****************************************************************************
      void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil)
      {
          //Glossaire des widgets graphiques de TraitementBoutonFil
              GtkWidget* FenetreSelection;
              GtkWidget* FenetreParent;
      
          //Creation de la fenetre de selection
          FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN,
                                                          "Ouvrir", GTK_RESPONSE_OK,
                                                          "Annuler", GTK_RESPONSE_CANCEL, NULL);
          //On limite les actions a cette fenetre
          gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE);
      
          //Affichage de la fenetre
          switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))
          {
              case GTK_RESPONSE_OK:
                  //Recuperation du chemin
                  cheminFichierFil = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));
                  gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil);
              break;
              default:
                  //[aucune instruction]
              break;
          }
          gtk_widget_destroy(FenetreSelection);
      }
      
      //****************************************************************************
      //Traitement du bouton "Parcourir" du fichier de définition des connecteurs
      //****************************************************************************
      void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf)
      {
          //Glossaire des widgets graphiques de TraitementBoutonPrf
              GtkWidget* FenetreSelection;
              GtkWidget* FenetreParent;
      
          //Creation de la fenetre de selection
          FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN,
                                                          "Ouvrir", GTK_RESPONSE_OK,
                                                          "Annuler", GTK_RESPONSE_CANCEL,NULL);
          //On limite les actions a cette fenetre
          gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE);
      
          //Affichage de la fenetre
          switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))
          {
              case GTK_RESPONSE_OK:
                  //Recuperation du chemin
                  cheminFichierPrf = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));
                  gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf);
              break;
              default:
                  //[aucune instruction]
              break;
          }
          gtk_widget_destroy(FenetreSelection);
      }
      
      //****************************************************************************
      //Traitement du bouton des paramètres de continuité
      //****************************************************************************
      void TraitementBoutonConti(GtkWidget* pWidget, gpointer data)
      {
          //Glossaire des widgets graphiques de TraitementBoutonConti
              GtkWidget* FenetreConti;
              GtkWidget* FenetreParent;
      
          //Creation de la fenetre de selection
          FenetreConti = gtk_dialog_new_with_buttons(
                "Parametres de continuite",
                GTK_WINDOW(FenetreParent),
                GTK_DIALOG_DESTROY_WITH_PARENT,
                "OK", GTK_RESPONSE_OK,
                "Annuler", GTK_RESPONSE_CANCEL,
                NULL);
      
          //*********************************************************
          //interface de la denêtre des paramètres de continuité
          //*********************************************************
              //Glossaire
                  GtkWidget* frameConti = NULL;
                  GtkWidget* tableConti = NULL;
                  GtkWidget* LabelConti1= NULL;
                  GtkWidget* LabelConti2= NULL;
                  GtkWidget* LabelConti3= NULL;
                  GtkWidget* LabelConti4= NULL;
                  GtkWidget* LabelConti5= NULL;
      
              //mise en page des widgets
                  //Formalisation du texte
                  frameConti = gtk_frame_new ("");
                  tableConti = gtk_table_new(6, 3, TRUE);
      
              //labels
                  LabelConti1 = gtk_label_new("Resistance min :");
                  LabelConti2 = gtk_label_new("Resistance max :");
                  LabelConti3 = gtk_label_new("Courant de mesure :");
                  LabelConti4 = gtk_label_new("Tension max :");
                  LabelConti5 = gtk_label_new("Temps d'application :");
      
              //entrys
                  EntryConti1 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryConti1), continuite.Conti1);
      
                  EntryConti2 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryConti2), continuite.Conti2);
      
                  EntryConti3 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryConti3), continuite.Conti3);
      
                  EntryConti4 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryConti4), continuite.Conti4);
      
                  EntryConti5 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryConti5), continuite.Conti5);
      
              //Placement des éléments dans le tableau
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti1, 0, 2, 0, 1);
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti1, 2, 3, 0, 1);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti2, 0, 2, 1, 2);
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti2, 2, 3, 1, 2);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti3, 0, 2, 2, 3);
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti3, 2, 3, 2, 3);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti4, 0, 2, 3, 4);
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti4, 2, 3, 3, 4);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti5, 0, 2, 4, 5);
                  gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti5, 2, 3, 4, 5);
      
              //Hiérarchie des composants graphiques
                  gtk_container_add(GTK_CONTAINER (frameConti), tableConti);
                  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreConti)->vbox),frameConti);
                  gtk_widget_show_all(FenetreConti);
      
          //Affichage de la fenetre
          switch(gtk_dialog_run(GTK_DIALOG(FenetreConti)))
          {
              case GTK_RESPONSE_OK:
                  continuite.Conti1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti1)),-1, NULL, NULL, NULL);
                  continuite.Conti2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti2)),-1, NULL, NULL, NULL);
                  continuite.Conti3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti3)),-1, NULL, NULL, NULL);
                  continuite.Conti4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti4)),-1, NULL, NULL, NULL);
                  continuite.Conti5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti5)),-1, NULL, NULL, NULL);
              break;
              default:
                  continuite.Conti1 = "default";
                  continuite.Conti2 = "default";
                  continuite.Conti3 = "default";
                  continuite.Conti4 = "default";
                  continuite.Conti5 = "default";
      
              break;
          }
          gtk_widget_destroy(FenetreConti);
      }
      
      //****************************************************************************
      //Traitement du bouton des paramètres d'isolement
      //****************************************************************************
      void TraitementBoutonIso(GtkWidget* pWidget, gpointer data)
      {
          //Glossaire des widgets graphiques de TraitementBoutonIso
              GtkWidget* FenetreIso;
              GtkWidget* FenetreParent;
      
          //Creation de la fenetre de selection
          FenetreIso = gtk_dialog_new_with_buttons(
                "Parametres d'isolement",
                GTK_WINDOW(FenetreParent),
                GTK_DIALOG_DESTROY_WITH_PARENT,
                "OK", GTK_RESPONSE_OK,
                "Annuler", GTK_RESPONSE_CANCEL,
                NULL);
      
          //*********************************************************
          //interface de la denêtre des paramètres d'isolement
          //*********************************************************
              //Glossaire
                  GtkWidget* frameIso = NULL;
                  GtkWidget* tableIso = NULL;
                  GtkWidget* LabelIso1= NULL;
                  GtkWidget* LabelIso2= NULL;
                  GtkWidget* LabelIso3= NULL;
                  GtkWidget* LabelIso4= NULL;
                  GtkWidget* LabelIso5= NULL;
      
              //mise en page des widgets
                  //Formalisation du texte
                  frameIso = gtk_frame_new ("");
                  tableIso = gtk_table_new(6, 3, TRUE);
      
              //labels
                  LabelIso1 = gtk_label_new("Resistance min :");
                  LabelIso2 = gtk_label_new("Tension d'isolement :");
                  LabelIso3 = gtk_label_new("Courant de claquage :");
                  LabelIso4 = gtk_label_new("Temps de montee :");
                  LabelIso5 = gtk_label_new("Temps d'application :");
      
              //entrys
                  EntryIso1 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryIso1), isolement.Iso1);
      
                  EntryIso2 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryIso2), isolement.Iso2);
      
                  EntryIso3 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryIso3), isolement.Iso3);
      
                  EntryIso4 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryIso4), isolement.Iso4);
      
                  EntryIso5 = gtk_entry_new();
                  gtk_entry_set_text(GTK_ENTRY(EntryIso5), isolement.Iso5);
      
              //Placement des éléments dans le tableau
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso1, 0, 2, 0, 1);
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso1, 2, 3, 0, 1);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso2, 0, 2, 1, 2);
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso2, 2, 3, 1, 2);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso3, 0, 2, 2, 3);
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso3, 2, 3, 2, 3);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso4, 0, 2, 3, 4);
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso4, 2, 3, 3, 4);
      
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso5, 0, 2, 4, 5);
                  gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso5, 2, 3, 4, 5);
      
              //Hiérarchie des composants graphiques
                  gtk_container_add(GTK_CONTAINER (frameIso), tableIso);
                  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreIso)->vbox),frameIso);
                  gtk_widget_show_all(FenetreIso);
      
          //Affichage de la fenetre
          switch(gtk_dialog_run(GTK_DIALOG(FenetreIso)))
          {
              case GTK_RESPONSE_OK:
                  isolement.Iso1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso1)),-1, NULL, NULL, NULL);
                  isolement.Iso2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso2)),-1, NULL, NULL, NULL);
                  isolement.Iso3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso3)),-1, NULL, NULL, NULL);
                  isolement.Iso4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso4)),-1, NULL, NULL, NULL);
                  isolement.Iso5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso5)),-1, NULL, NULL, NULL);
              break;
              default:
                  isolement.Iso1 = "default";
                  isolement.Iso2 = "default";
                  isolement.Iso3 = "default";
                  isolement.Iso4 = "default";
                  isolement.Iso5 = "default";
      
              break;
          }
          gtk_widget_destroy(FenetreIso);
      }
      
      
      void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale)
      {
          gtk_widget_destroy(FenetrePrincipale);
      }
      
      
      
      1. Bonjour

        Moi non plus, je ne vois pas de
        extern gchar* cheminFichierFil;
        dans ton generateur.h
        1. ok faut que tu protège déjà ton .h

          #ifndef NOMDETONHEADER
          #define NOMDETONHEADER

          // tous ton .h

          #endif

          voila déjà

          Puis dans ton .h il y a pas de extern gchar* cheminFichierFil;
          1. Oui excusez-moi j'ai du le changer pour pouvoir montrer le programme au boss, donc j'ai du faire en sorte qu'il compile. Je fais ces modifications et vous tiens au courant.
            Merci de vous interresser à mon cas.
            1. J'ai protégé mon .h comme tu me l'as dis (les 2 lignes au début et le endif à la fin si j'ai bien compris)
              Et j'ai enlevé le
              gchar* cheminFichierFil = NULL;

              de mon main.c pour mettre
              extern gchar* cheminFichierFil;

              dans mon generateur.h (en gros j'ai remis ce qui pose problème =) Si vous voulez que je vous post le code complet, n'hésitez pas.

              Malgré la protection le problème persiste, cheminFichierFil n'est pas "declared in this scoop" selon mon compilateur.

              Autre interrogation: pourquoi cette erreur est-elle détectée à la ligne 379 du main, c'est à dire une ligne n'ayant aucun rapport? (cette ligne étant un simple break;)
              1. La ligne 379, c'est parce qu'il compte aussi les lignes du generateur.c
                On tombe bien sur "cheminFichierFil = InitChemin;"
                Normalement, le include ne sert qu'à inclure les fichiers .h. Les .c sont compilés séparément et c'est l'édition de lien qui les rassemble ensuite.
                Mais ça devrait marcher quand même. À quel endroit de ton .h as-tu mis extern gchar* cheminFichierFil; ?
                1. Un bon copier/coller vaut mieux qu'un long discours =).Voici le début de mon .h:
                  #ifndef generateur.h
                  #define generateur.h
                  
                  #include <stdlib.h>
                  #include <gtk/gtk.h>
                  #include <stdio.h>
                  #include <string.h>
                  #define TAILLE_MAX 1000
                  #define TAILLE_MAX_PETIT 20
                  extern char chaine[TAILLE_MAX];
                  extern gchar* cheminFichierFil;

                  Après il y aura la "partie interface etc.
                  1. Bonjour

                    Je pense (pas sûr de moi) que ce qui est défini dans le generateur.h n'est connu que de generateur.c parce que l'include est dans generateur.c

                    Au début de ton main.c, juste avant le include generateur.c, ajoute un include generateur.h, si j'ai raison ça devrait mieux marcher (du moins pour cette erreur-là, car j'ai bien peur que le linker te dise que cette variable n'est pas définie).

                    Mais je continue à ne pas comprendre ta façon de procéder : normalement, dans les .c tu ne fais d'include que de.h, pas d'autres .c.
                    1. OkOk, bon ... ca va déjà beaucoup mieux.
                      En fait, lorsque je faisais de la manière usuelle (c'est à dire include le .h et non le .c) il me mettait des multiples declarations partout. Le fait d'include le .c était ce que j'ai décris comme étant "faire à l'arrache" lors du premier post.
                      Mais on dirait qu'après protection du fichier, il n'y a plus ces multiples déclarations lorsque je procède normalement.
                      Par contre, il n'y a toujours pas de reconnaissance de cheminFichierFil.

                      Pour ne pas vous perdre, je copie tout le nécessaire sur l'état actuel de mes fichiers:

                      dans main.cpp:
                      #include "generateur.h"

                      dans generateur.c:
                      #include "generateur.h"

                      et le generateur.h au complet:
                      #ifndef generateur.h
                      #define generateur.h
                      
                      #include <stdlib.h>
                      #include <gtk/gtk.h>
                      #include <stdio.h>
                      #include <string.h>
                      #define TAILLE_MAX 1000
                      #define TAILLE_MAX_PETIT 20
                      extern char chaine[TAILLE_MAX];
                      extern gchar* cheminFichierFil;
                      
                      
                      //********************************************************************************
                      //Partie interface
                      //********************************************************************************
                          //paramètres d'isolement
                              typedef struct
                              {
                                  const gchar* Iso1;
                                  const gchar* Iso2;
                                  const gchar* Iso3;
                                  const gchar* Iso4;
                                  const gchar* Iso5;
                              } Isolement;
                      
                              Isolement isolement;
                      
                          //paramètres de continuité
                              typedef struct
                              {
                                  const gchar* Conti1;
                                  const gchar* Conti2;
                                  const gchar* Conti3;
                                  const gchar* Conti4;
                                  const gchar* Conti5;
                              } Continuite;
                      
                              Continuite continuite;
                      
                      
                          //Génère le code du programme winpass
                          void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf,
                                                   Continuite continuite, Isolement isolement);
                      
                      //********************************************************************************
                      //partie générateur
                      //********************************************************************************
                      
                          //retourne le nombre de lignes d'un fichier
                          int tailleLignesFichier (FILE* fichier);
                      
                          //enregistrement d'une connection
                          typedef struct
                          {
                              char nomConnecteur[TAILLE_MAX_PETIT];
                              char contact[TAILLE_MAX_PETIT];
                          } connection;
                      
                          //création du type qui savegardera les connections
                          typedef connection typeTableauConnection [TAILLE_MAX];
                      
                          //enregistrement d'une définition de connecteur
                          typedef struct
                          {
                              char nomConnecteur[TAILLE_MAX_PETIT];
                              char typeConnecteur[TAILLE_MAX_PETIT];
                          } defConnection;
                      
                          //création du type qui savegardera les définition des connecteurs
                          typedef defConnection typeTableauDefinitionConnecteur [TAILLE_MAX];
                      
                          //traitement d'un fichier des connections de type fichier.FIL
                          int traitementFichierDesConnections (char * nomFichierFil, typeTableauConnection tableauConnection);
                      
                          //traitement d'un fichier des définition de connecteurs de type fichier.PRF
                          int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur);
                      
                      #endif
                      
                      
                      
                      1. Bonjour

                        J'ai essayé 10 fois hier, ça me disait ok, mais ensuite le message n'apparaissait pas dans le forum.
                        1. Bonjour

                          Il doit y avoir des mots refusés dans mon message. alors j'insère des espaces en espérant échapper à la censure (si c'est ça le problème)
                          As-tu toujours vraiment le même message d'erreur ? Venant du compilateur ou du l i n k e r ? peux-tu en faire un copier-coller complet ?
                          1. Oui, j'ai toujours le message d'erreur. Par contre, j'ai vu que si je déclarais mon cheminFichierFil dans mon main.c, il ne me trouvais pas ma déclaration de TraitementBoutonGen. Donc si je compile avec la configuration du message du 18 à 10h49, ca me donne ce message:
                            C:\Documents a...  In function 'int main(int, char**)':  
                            C:\Documents a... 109 error: 'cheminFichierFil' was not declared in this scope  
                               === Build finished: 1 errors, 0 warnings ===

                            Et si je rajoute
                            gchar* cheminFichierFil = NULL;
                            dans mon main.cpp, il me donne:
                            C:\Debug\main.o  In function 'main':  
                            C:\Documents a... 320 undefined reference to 'TraitementBoutonGen(GtkWidget*, char*, char*, Continuite, Iso...  
                               === Build finished: 1 errors, 0 warnings ===


                            Je me demandais: Est-ce que le fait que j'ai un main.cpp et le generateur sous l'extension *.c pourrait être la cause du problème?
                            En tout cas merci beaucoup de t'interresser à mon cas.
                            1. Je viens enfin de remarquer... tu as défini gchar* cheminFichierFil = NULL; dans generateur.c, mais tu ne l'as pas déclaré dans generateur.h ! Normal qu'il ne le connaisse plus si tu n'inclus pas generateur.c
                              idem pour TraitementBoutonGen.

                              Mais as-tu une conscience bien précise de ce que sont la définition et la déclaration ? C'est peut-être pour ça que tu as des problèmes avec les headers et que tu fais des include (excuse-moi) au hasard au lieu de les faire logiquement.
                              1. Désolé, je ne te suis pas vraiment là... Je ne vois pas de déclaration de gchar* cheminFichierFil = NULL; dans generateur.c.
                                Et j'ai changé mon generateur.h en rajoutant la ligne extern gchar* cheminFichierFil; (enfin si c'est ca que tu veux dire) c'est bien une déclaration? ou je je trompe?
                                Pour TraitementBoutonGen, le prototype de cette fonction ne suffit pas dans le generateur.h?

                                En fait, tu as raison, je ne sais pas vraiment ce qu'est la définition et la déclaration visiblement... désolé ...
                                1. J'avais mélangé tes fichiers en les recopiant, c'est pour ça que je ne retrouvais pas des définitions et les déclarations aux bons endroits. Donc ce que j'ai dit dans mon dernier message ne tient pas la route.

                                  D'ailleurs je n'arrive plus à suivre, je ne connais plus l'état actuel de tes fichiers.

                                  Actuellement, qu'est devenu le generateur.c ? S'il n'est plus inclus dans main.cpp, il faudrait le rebaptiser en .cpp et le mettre dans le projet.

                                  Par ailleurs, gchar* cheminFichierFil = NULL; dans generateur.c. est une définition de variable et non pas une déclaration : cette ligne crée bien une zone mémoire pour stocker la variable.
                                  1. Bon je vais te faire un copier coller des 3 fichiers en 3 post, ce sera plus clair. (j'ai changé le generateur.c en generateur.cpp, et on dirait que les problèmes sont différents. (des multiples définitions maintenant.)
                                    Et on reprend à partir de là si tu veux bien =)

                                    Je commence tout de suite avec mon generateur.h:
                                    #ifndef generateur.h
                                    #define generateur.h
                                    
                                    #include <stdlib.h>
                                    #include <gtk/gtk.h>
                                    #include <stdio.h>
                                    #include <string.h>
                                    #define TAILLE_MAX 1000
                                    #define TAILLE_MAX_PETIT 20
                                    extern char chaine[TAILLE_MAX];
                                    extern gchar* cheminFichierFil;
                                    
                                    //********************************************************************************
                                    //Partie interface
                                    //********************************************************************************
                                        //paramètres d'isolement
                                            typedef struct
                                            {
                                                const gchar* Iso1;
                                                const gchar* Iso2;
                                                const gchar* Iso3;
                                                const gchar* Iso4;
                                                const gchar* Iso5;
                                            } Isolement;
                                    
                                        Isolement isolement;
                                    
                                        //paramètres de continuité
                                            typedef struct
                                            {
                                                const gchar* Conti1;
                                                const gchar* Conti2;
                                                const gchar* Conti3;
                                                const gchar* Conti4;
                                                const gchar* Conti5;
                                            } Continuite;
                                    
                                        Continuite continuite;
                                    
                                    
                                        //Génère le code du programme winpass
                                        void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf,
                                                                 Continuite continuite, Isolement isolement);
                                    
                                    //********************************************************************************
                                    //partie générateur
                                    //********************************************************************************
                                    
                                        //retourne le nombre de lignes d'un fichier
                                        int tailleLignesFichier (FILE* fichier);
                                    
                                        //enregistrement d'une connection
                                        typedef struct
                                        {
                                            char nomConnecteur[TAILLE_MAX_PETIT];
                                            char contact[TAILLE_MAX_PETIT];
                                        } connection;
                                    
                                        //création du type qui savegardera les connections
                                        typedef connection typeTableauConnection [TAILLE_MAX];
                                    
                                        //enregistrement d'une définition de connecteur
                                        typedef struct
                                        {
                                            char nomConnecteur[TAILLE_MAX_PETIT];
                                            char typeConnecteur[TAILLE_MAX_PETIT];
                                        } defConnection;
                                    
                                        //création du type qui savegardera les définition des connecteurs
                                        typedef defConnection typeTableauDefinitionConnecteur [TAILLE_MAX];
                                    
                                        //traitement d'un fichier des connections de type fichier.FIL
                                        int traitementFichierDesConnections (char * nomFichierFil, typeTableauConnection tableauConnection);
                                    
                                        //traitement d'un fichier des définition de connecteurs de type fichier.PRF
                                        int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur);
                                    
                                    #endif
                                    
                                    
                                    
                                    
                                    1. generateur.cpp:
                                      #include "generateur.h"
                                      
                                      int traitementFichierDesConnections(char * cheminFichierFil, typeTableauConnection tableauConnections);
                                      
                                      
                                      void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf,
                                                               Continuite continuite, Isolement isolement)
                                      {
                                          FILE* fichierTest = fopen("test", "w+");
                                          cheminFichierFil = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.FIL",
                                                                               -1, NULL, NULL, NULL);
                                          cheminFichierPrf = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.PRF",
                                                                               -1, NULL, NULL, NULL);
                                      //***********************************************************************************************************
                                      //fichier FIL
                                      //***********************************************************************************************************
                                          int nb_connections;
                                              typeTableauConnection tableauConnections;
                                              nb_connections = traitementFichierDesConnections(cheminFichierFil, tableauConnections);
                                      
                                          int i;
                                          for(i = 0; i < nb_connections; i++)
                                              {
                                                  fprintf(fichierTest,"\n%s : %s",tableauConnections[i].nomConnecteur, tableauConnections[i].contact);
                                              }
                                      //***********************************************************************************************************
                                      //fichier PRF
                                      //***********************************************************************************************************
                                          typeTableauDefinitionConnecteur tableauDefinitionConnecteur;
                                          int ligneligne = traitementFichierDefinitionConnecteurs(cheminFichierPrf, tableauDefinitionConnecteur);
                                      
                                              int it;
                                              fprintf(fichierTest,"\n\ndescription des connecteurs : \n");
                                              for(it = 0; it < ligneligne; it++)
                                              {
                                                  fprintf(fichierTest,"\n%s : %s",tableauDefinitionConnecteur[it].nomConnecteur, tableauDefinitionConnecteur[it].typeConnecteur);
                                              }
                                      
                                      
                                      
                                          int fclose(FILE* fichierTest);
                                      
                                      
                                          //****************************************************************
                                          //Affichage du message de succès de la génération du fichier
                                          //****************************************************************
                                              GtkWidget* FenetreGeneration = NULL;
                                              GtkWidget* tableGen = NULL;
                                              GtkWidget* LabelSucces = NULL;
                                                  gchar* TexteSucces = NULL;
                                              GtkWidget* BoutonOK = NULL;
                                      
                                             FenetreGeneration = gtk_dialog_new();
                                             tableGen = gtk_table_new(2, 6, TRUE);
                                             gtk_window_set_title(GTK_WINDOW(FenetreGeneration), "Generation accomplie");
                                      
                                             TexteSucces =g_locale_to_utf8( "Génération du fichier accomplie avec succès", -1, NULL, NULL, NULL);
                                             LabelSucces = gtk_label_new (TexteSucces);
                                             gtk_table_attach_defaults(GTK_TABLE(tableGen), LabelSucces, 1, 5, 0, 1);
                                      
                                             BoutonOK = gtk_button_new_with_label("OK");
                                             gtk_signal_connect_object (GTK_OBJECT (BoutonOK), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), FenetreGeneration);
                                             gtk_table_attach_defaults(GTK_TABLE(tableGen), BoutonOK, 2, 4, 1, 2);
                                      
                                             gtk_container_add (GTK_CONTAINER (GTK_DIALOG(FenetreGeneration)->vbox), tableGen);
                                             gtk_widget_show_all (FenetreGeneration);
                                      }
                                      
                                      
                                      //**************************************************************************************************************
                                      int tailleLignesFichier (FILE* fichier)
                                      {
                                      	int taille = 0;
                                      
                                      	while( fgets (chaine, TAILLE_MAX, fichier) != NULL)
                                      	{
                                      		taille++;
                                      	}
                                      	//remise du curseur au début du fichier
                                      	fseek(fichier, 0, SEEK_SET);
                                      	return taille;
                                      }
                                      
                                      
                                      //**************************************************************************************************************
                                      
                                      
                                      int tailleLigneDescConnecteur (FILE* fichier)
                                      {
                                          int ligne=0;
                                          int trouve=0;
                                          char buffer[TAILLE_MAX];
                                          while(fgets(buffer, sizeof buffer, fichier))
                                          {
                                              ligne++;
                                              if(strstr(buffer,"EQUIPEMENT DE BASE"))
                                              {
                                                  trouve=1;
                                                  break;
                                              }
                                          }
                                          if(trouve)
                                          {
                                              //remise du curseur au début du fichier
                                              fseek(fichier, 0, SEEK_SET);
                                              return ligne - 1;
                                          }
                                          else
                                          {
                                              return 0;
                                          }
                                      }
                                      
                                      //**************************************************************************************************************
                                      
                                      
                                      
                                      int traitementFichierDesConnections (char * cheminFichierFil, typeTableauConnection tableauConnections)
                                      {
                                      	int iLigne = 0;             //itérateur pour les lignes (vérifier le 1 peut-etre 0)
                                      	int i = 0;                  //itérateur pour les diférentes connections dans le tableau
                                      	int j = 0;                  //itérateur pour le nombre de caractère des données récupérées
                                          int iSaut;                  //itérateur pour sauter les caractères indésirés
                                          int testPremiereBoucle;     //booléen pour savoir si l'on doit sauter le premier caractère ou non
                                          char carac;                 //caractère renvoyé par les fputc
                                      
                                      
                                      	//ouverture du fichier en lecture
                                          FILE* fichierFil = fopen(cheminFichierFil, "r");
                                          if(fichierFil != NULL)
                                          {
                                      
                                              //test du nombre de lignes
                                              const int NB_LIGNES = tailleLignesFichier (fichierFil);
                                              while(iLigne < NB_LIGNES)
                                          	{
                                                  //*******************************************
                                                  //traitement d'une ligne
                                                  //*******************************************
                                                  iSaut = 0;
                                                  testPremiereBoucle = 1;
                                                  //tant que l'on ne trouvons pas le marqueur de fin de ligne on continue le traitement
                                                  while((carac=fgetc (fichierFil)) != 10)//10 étant l'entier associé au caractère "retour à la ligne"
                                                  {
                                                      j = 0;
                                                      //on saute les renseignements qui ne nous interresent pas
                                                      while(iSaut < 10)
                                                      {
                                                          carac = fgetc (fichierFil);
                                                          //on ne valide le saut d'une colonne que lorsque l'on rencontre le caractère "|"
                                                          if(carac == 124)//124 étant l'entier associé au caractère "|"
                                                          {
                                                              iSaut++;
                                                          }
                                                      }
                                      
                                                      //si il s'agit de la première boucle de la ligne, on doit sauter un dernier caractère
                                      				if(testPremiereBoucle == 1)
                                      				{
                                      					carac = fgetc (fichierFil);
                                      					testPremiereBoucle = 0;
                                      				}
                                      				//on stocke dans le tableau le nom du connecteur
                                      				while(carac != 47)//47 étant l'entier associé au caractère "/"
                                      				{
                                      				    tableauConnections[i].nomConnecteur[j]=carac;
                                      				    j++;
                                      					carac = fgetc (fichierFil);
                                      				}
                                      				carac = fgetc (fichierFil);
                                      				j = 0 ;
                                      				//on stocke dans le tableau le contact
                                      				while(carac != 124)
                                      				{
                                      				    tableauConnections[i].contact[j]=carac;
                                      				    j++;
                                      					carac = fgetc (fichierFil);
                                      				}
                                      				i++;
                                                  }
                                                  iLigne++;
                                          	}
                                          }
                                          else
                                          {
                                              printf("\nerreur \x85 l'ouverture du fichier %s", cheminFichierFil);
                                          }
                                      
                                          //fermeture du fichier
                                          int fclose(FILE* fichierFil);
                                      
                                          //on retourne le nombre de connections
                                          return i;
                                      }
                                      
                                      //**************************************************************************************************************
                                      
                                      int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur)
                                      {
                                          long iLigne = 0;    //itérateur pour les lignes
                                          int i = 0;          //itérateur pour les connections
                                          int j;              //itérateur pour le nombre de caractère des données récupérées
                                          char carac;         //caractère renvoyé par les fputc
                                      
                                          //ouverture du fichier en lecture
                                          FILE* fichierPrf = fopen(nomFichierPrf, "r");
                                          if(fichierPrf != NULL)
                                          {
                                              //test du nombre de lignes
                                              const int NB_LIGNES = tailleLigneDescConnecteur(fichierPrf);
                                              while(iLigne < NB_LIGNES)
                                              {
                                                  //*******************************************
                                                  //traitement d'une ligne
                                                  //*******************************************
                                                  if (fgetc (fichierPrf) != 179)
                                                  {
                                                      while((fgetc (fichierPrf)) != 10);
                                                  }
                                                  else
                                                  {
                                                      int iterator;
                                                      //on saute les caractères intiles
                                                      for (iterator = 0; iterator < 7; iterator++)
                                                      {
                                                          carac = fgetc(fichierPrf);
                                                      }
                                                      if(carac == 32)
                                                      {
                                                          //ligne vide donc aucun traitement
                                                      }
                                                      else
                                                      {
                                                          j = 0;
                                                          while(carac != 32)
                                                          {
                                                              //on stocke dans le tableau le nom du connecteur
                                                              tableauDefinitionConnecteur[i].nomConnecteur[j] = carac;
                                                              j++;
                                                              carac = fgetc (fichierPrf);
                                                          }
                                                          for (iterator = 0; iterator < 3; iterator++)
                                                          {
                                                              //on saute les caractères intiles
                                                              carac = fgetc (fichierPrf);
                                                          }
                                                          j = 0;
                                                          while(carac != 32)
                                                          {
                                                              //on stocke dans le tableau le nom du types du connecteur
                                                              tableauDefinitionConnecteur[i].typeConnecteur[j] = carac;
                                                              j++;
                                                              carac = fgetc (fichierPrf);
                                                          }
                                                          i++;
                                                      }
                                                      while((fgetc (fichierPrf)) != 10);
                                                  }
                                                  iLigne++;
                                              }
                                          }
                                          else
                                          {
                                              printf("\nerreur \x85 l'ouverture du fichier %s", nomFichierPrf);
                                          }
                                          //fermeture du fichier
                                          int fclose(FILE* fichierPrf);
                                      
                                          //on retourne le nombre de définitions de connecteurs
                                          return i;
                                      }
                                      
                                      
                                      1. et main.cpp:
                                        #include "generateur.h"
                                        //ATTENTION ! ! !
                                        //chemin du fichier des connections
                                            //la je l'ai mis en commentaire pour pouvoir compiler mais je compte le virer
                                            //gchar* cheminFichierFil = NULL;
                                        
                                        //chemin du fichier des définitions de connecteurs
                                            gchar* cheminFichierPrf = NULL;
                                        
                                        //Créé la boîte de dialogue nous permettant de sélectionner un fichier.FIL pour récupérer son chemin
                                        void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil);
                                            GtkWidget* EntryFil = NULL;       //Entry du chemin du fichier des connections
                                        
                                        
                                        //Créé la boîte de dialogue nous permettant de sélectionner un fichier.PRF pour récupérer son chemin
                                        void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf);
                                            GtkWidget* EntryPrf = NULL;       //Entry du chemin du fichier des définitions de connecteurs
                                        
                                        
                                        //Créé la boîte de dialogue nous permettant de modifier les paramètres de continuité
                                        void TraitementBoutonConti(GtkWidget* pWidget, gpointer data);
                                        
                                        
                                            //entrys des paramètres de continuité
                                                GtkWidget* EntryConti1= NULL;
                                                GtkWidget* EntryConti2= NULL;
                                                GtkWidget* EntryConti3= NULL;
                                                GtkWidget* EntryConti4= NULL;
                                                GtkWidget* EntryConti5= NULL;
                                        
                                        
                                        //Créé la boîte de dialogue nous permettant de modifier les paramètres d'isolement
                                        void TraitementBoutonIso(GtkWidget* pWidget, gpointer data);
                                        
                                            //entrys des paramètres d'isolement
                                                GtkWidget* EntryIso1= NULL;
                                                GtkWidget* EntryIso2= NULL;
                                                GtkWidget* EntryIso3= NULL;
                                                GtkWidget* EntryIso4= NULL;
                                                GtkWidget* EntryIso5= NULL;
                                        
                                        
                                        //Ferme le programme
                                        void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale);
                                        
                                        int main(int argc,char **argv)
                                        {
                                            //Ouverture de la librairie graphique GTK+
                                            gtk_init(&argc,&argv);
                                        
                                            //Glossaire des widgets graphiques
                                            GtkWidget* FenetrePrincipale = NULL;    //Fenêtre principale
                                            GtkWidget* frame = NULL;                //Frame principale(faisant toute la fenêtre
                                            GtkWidget* table = NULL;                //Tableau graphique pour placer les éléments
                                        
                                            GtkWidget* LabelBienvenue = NULL;       //Label de présentation
                                                gchar* TexteBienvenue = NULL;       //Texte associé au label de présentation
                                            GtkWidget* boxBienvenue = NULL;         //Box contenant l'alignement du label de bienvenue
                                            GtkWidget* alignementBienvenue = NULL;  //Alignement du label de bienvenue
                                        
                                            GtkWidget* LabelFil = NULL;             //Label de renseignement du fichier de connections
                                                gchar* TexteFil = NULL;             //Texte associé au label de connections
                                        
                                            GtkWidget* BoutonFil = NULL;            //Bouton pour sélectionner le fichier de connections
                                            GtkWidget* boxFil = NULL;               //Box pour contenir l'alignement du bouton de connections
                                            GtkWidget* alignementFil = NULL;        //Alignement du bouton des connections
                                        
                                            GtkWidget* LabelPrf = NULL;             //Label de renseignement de la description des connecteurs
                                                gchar* TextePrf = NULL;             //Texte associé au label de description
                                        
                                            GtkWidget* BoutonPrf = NULL;            //Bouton pour sélectionner le fichier de description
                                            GtkWidget* boxPrf = NULL;               //Box pour contenir l'alignement du bouton de description
                                            GtkWidget* alignementPrf = NULL;        //Alignement du bouton de description
                                        
                                            GtkWidget* BoutonConti = NULL;            //Bouton pour modifier les paramètres de continuité
                                                gchar* TexteConti = NULL;             //Texte associé au bouton de continuité
                                            GtkWidget* boxConti = NULL;               //Box pour contenir l'alignement du bouton de continuité
                                            GtkWidget* alignementConti = NULL;        //Alignement du bouton de continuité
                                        
                                            GtkWidget* BoutonIso = NULL;            //Bouton pour modifier les paramètres d'isolement
                                                gchar* TexteIso = NULL;             //Texte associé au bouton d'isolement
                                            GtkWidget* boxIso = NULL;               //Box pour contenir l'alignement du bouton d'isolement
                                            GtkWidget* alignementIso = NULL;        //Alignement du bouton d'isolement
                                        
                                            GtkWidget* BoutonGen = NULL;            //Bouton pour générer le code winpass
                                                gchar* TexteGen = NULL;             //Texte associé au bouton de génération
                                            GtkWidget* boxGen = NULL;               //Box pour contenir l'alignement du bouton de génération
                                            GtkWidget* alignementGen = NULL;        //Alignement du bouton de génération
                                        
                                            GtkWidget* BoutonClose = NULL;          //Bouton pour fermer le programme
                                            GtkWidget* boxClose = NULL;             //Box pour contenir l'alignement du bouton de fermeture
                                            GtkWidget* alignementClose = NULL;      //Alignement du bouton de fermeture
                                        
                                            //initialisation des paramètres de continuité
                                                continuite.Conti1 = "default";
                                                continuite.Conti2 = "default";
                                                continuite.Conti3 = "default";
                                                continuite.Conti4 = "default";
                                                continuite.Conti5 = "default";
                                        
                                            //initialisation des paramètres d'isolement
                                                isolement.Iso1 = "default";
                                                isolement.Iso2 = "default";
                                                isolement.Iso3 = "default";
                                                isolement.Iso4 = "default";
                                                isolement.Iso5 = "default";
                                        
                                            //initialisation du chemin des fichiers
                                            gchar* InitChemin =g_locale_to_utf8( "Chemin du fichier...", -1, NULL, NULL, NULL);
                                            cheminFichierFil = InitChemin;
                                            cheminFichierPrf = InitChemin;
                                        
                                            //******************************************************************************************
                                            // Création de la fenêtre
                                            //******************************************************************************************
                                                FenetrePrincipale = gtk_window_new(GTK_WINDOW_TOPLEVEL);
                                                g_signal_connect(G_OBJECT(FenetrePrincipale), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
                                        
                                                //Titre de la fenêtre
                                                gtk_window_set_title(GTK_WINDOW(FenetrePrincipale), "Generateur de code Winapss5000");
                                        
                                                //Taille de la fenêtre
                                                gtk_window_set_default_size(GTK_WINDOW(FenetrePrincipale), 700, 500);
                                        
                                                //Positionnement de la fenêtre
                                                gtk_window_set_position(GTK_WINDOW(FenetrePrincipale),GTK_WIN_POS_CENTER);
                                        
                                            //******************************************************************************************
                                            // Création de la hiérarchie graphique de la fenêtre
                                            //******************************************************************************************
                                                frame = gtk_frame_new ("");
                                                table = gtk_table_new(8, 6, TRUE);
                                                gtk_container_add (GTK_CONTAINER (frame), table);
                                        
                                                //***************************************************
                                                //Label de bienvenue
                                                //***************************************************
                                                    //Formalisation du texte
                                                    TexteBienvenue = g_locale_to_utf8( "<span size=\"xx-large\"><b>Générateur Winapass5000</b></span>",
                                                                                      -1, NULL, NULL, NULL);
                                                    //Création du label
                                                    LabelBienvenue = gtk_label_new(TexteBienvenue);
                                        
                                                    //Libération de la mémoire
                                                    g_free(TexteBienvenue);
                                        
                                                    //Formalisation grâce aux balises pango
                                                    gtk_label_set_use_markup(GTK_LABEL(LabelBienvenue), TRUE);
                                        
                                                    //Création de la box pour contenir l'alignement du label
                                                    boxBienvenue = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du label
                                                    alignementBienvenue = gtk_alignment_new(0.5, 0, 0, 0);
                                        
                                                    //Hiérarchie des composants graphiques pour le label de bienvenue
                                                    gtk_container_add (GTK_CONTAINER(alignementBienvenue), LabelBienvenue);
                                                    gtk_container_add (GTK_CONTAINER (boxBienvenue), alignementBienvenue);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxBienvenue, 0, 6, 0, 1 );
                                        
                                                //***************************************************
                                                //Label de renseignement du fichier de connections
                                                //***************************************************
                                                    //Formalisation du texte
                                                    TexteFil = g_locale_to_utf8( "Veuillez renseigner le fichier de connections (fichier.FIL) :",
                                                                                -1, NULL, NULL, NULL);
                                                    //Création du label
                                                    LabelFil = gtk_label_new(TexteFil);
                                        
                                                    //Libération de la mémoire
                                                    g_free(TexteFil);
                                        
                                                    //Placement du label dans le tableau
                                                    gtk_table_attach_defaults(GTK_TABLE(table), LabelFil, 0, 4, 1, 2);
                                        
                                                //***************************************************
                                                //Bouton de renseignement du fichier de connections
                                                //***************************************************
                                                    //Création du bouton
                                                    BoutonFil = gtk_button_new_with_mnemonic("Parcourir");
                                        
                                                    //Création de la box pour contenir l'alignement du bouton
                                                    boxFil = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du bouton
                                                    alignementFil = gtk_alignment_new(0, 0.5, 0, 0);
                                        
                                                    //Hiérarchie des composants graphiques
                                                    gtk_container_add (GTK_CONTAINER(alignementFil), BoutonFil);
                                                    gtk_container_add (GTK_CONTAINER (boxFil), alignementFil);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxFil, 4, 5, 1, 2);
                                        
                                                    //Ecoute du bouton
                                                    g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                                                    g_signal_connect(G_OBJECT(BoutonFil), "clicked", G_CALLBACK(TraitementBoutonFil), NULL);
                                        
                                                //***************************************************
                                                //Entry du chemin du fichier de connections
                                                //***************************************************
                                                    //Création de l'entry
                                                    EntryFil = gtk_entry_new();
                                        
                                                    //initialisation du texte de l'entry
                                                    gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil);
                                        
                                                    //Placement de l'entry dans le tableau
                                                    gtk_table_attach_defaults(GTK_TABLE(table), EntryFil, 1, 5, 2, 3);
                                        
                                                //************************************************************
                                                //Label de renseignement du fichier de définition connecteurs
                                                //************************************************************
                                                    //Formalisation du texte
                                                    TextePrf = g_locale_to_utf8("Veuillez renseigner le fichier de définition des connecteurs (fichier.PRO) :",
                                                                                -1, NULL, NULL, NULL);
                                                    //Création du label
                                                    LabelPrf = gtk_label_new(TextePrf);
                                        
                                                    //Libération de la mémoire
                                                    g_free(TextePrf);
                                        
                                                    //Placement du label dans le tableau
                                                    gtk_table_attach_defaults(GTK_TABLE(table), LabelPrf, 0, 4, 3, 4);
                                        
                                                //*************************************************************
                                                //Bouton de renseignement du fichier de définition connecteurs
                                                //*************************************************************
                                                    //Création du bouton
                                                    BoutonPrf = gtk_button_new_with_mnemonic("Parcourir");
                                        
                                                    //Création de la box pour contenir l'alignement du bouton
                                                    boxPrf = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du bouton
                                                    alignementPrf = gtk_alignment_new(0, 0.5, 0, 0);
                                        
                                                    //Hiérarchie des composants graphiques
                                                    gtk_container_add (GTK_CONTAINER(alignementPrf), BoutonPrf);
                                                    gtk_container_add (GTK_CONTAINER (boxPrf), alignementPrf);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxPrf, 4, 5, 3, 4);
                                        
                                                    //Ecoute du bouton
                                                    g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                                                    g_signal_connect(G_OBJECT(BoutonPrf), "clicked", G_CALLBACK(TraitementBoutonPrf), NULL);
                                        
                                                //*************************************************************
                                                //Entry du chemin du fichier de définition connecteurs
                                                //*************************************************************
                                                    //Création de l'entry
                                                    EntryPrf = gtk_entry_new();
                                        
                                                    //initialisation du texte de l'entry
                                                    gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf);
                                        
                                                    //Placement de l'entry dans le tableau
                                                    gtk_table_attach_defaults(GTK_TABLE(table), EntryPrf, 1, 5, 4, 5);
                                        
                                                //*************************************************************
                                                //Bouton de paramètre de continuité
                                                //*************************************************************
                                                    //Création du bouton
                                                    TexteConti = g_locale_to_utf8("Paramètres de continuité",-1, NULL, NULL, NULL);
                                                    BoutonConti = gtk_button_new_with_label(TexteConti);
                                        
                                                    //Création de la box pour contenir l'alignement du bouton
                                                    boxConti = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du bouton
                                                    alignementConti = gtk_alignment_new(0, 0.5, 0.5, 0);
                                        
                                                    //Hiérarchie des composants graphiques
                                                    gtk_container_add (GTK_CONTAINER(alignementConti), BoutonConti);
                                                    gtk_container_add (GTK_CONTAINER (boxConti), alignementConti);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxConti, 2, 5, 5, 6);
                                        
                                                    //Ecoute du bouton
                                                    g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                                                    g_signal_connect(G_OBJECT(BoutonConti), "clicked", G_CALLBACK(TraitementBoutonConti), NULL);
                                        
                                                //*************************************************************
                                                //Bouton de paramètre d'isolement
                                                //*************************************************************
                                                    //Création du bouton
                                                    TexteIso = g_locale_to_utf8("Paramètres d'isolement",-1, NULL, NULL, NULL);
                                                    BoutonIso = gtk_button_new_with_label(TexteIso);
                                        
                                                    //Création de la box pour contenir l'alignement du bouton
                                                    boxIso = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du bouton
                                                    alignementIso = gtk_alignment_new(0, 0.5, 0.5, 0);
                                        
                                                    //Hiérarchie des composants graphiques
                                                    gtk_container_add (GTK_CONTAINER(alignementIso), BoutonIso);
                                                    gtk_container_add (GTK_CONTAINER (boxIso), alignementIso);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxIso, 2, 5, 6, 7);
                                        
                                                    //Ecoute du bouton
                                                    g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                                                    g_signal_connect(G_OBJECT(BoutonIso), "clicked", G_CALLBACK(TraitementBoutonIso), NULL);
                                        
                                                //*************************************************************
                                                //Bouton de génération du code winpass
                                                //*************************************************************
                                                    //Création du bouton
                                                    TexteGen = g_locale_to_utf8("Générer",-1, NULL, NULL, NULL);
                                                    BoutonGen = gtk_button_new_with_label(TexteGen);
                                        
                                                    //Création de la box pour contenir l'alignement du bouton
                                                    boxGen = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du bouton
                                                    alignementGen = gtk_alignment_new(0, 0.5, 0.5, 0);
                                        
                                                    //Hiérarchie des composants graphiques
                                                    gtk_container_add (GTK_CONTAINER(alignementGen), BoutonGen);
                                                    gtk_container_add (GTK_CONTAINER (boxGen), alignementGen);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxGen, 4, 5, 7, 8);
                                        
                                                    //Ecoute du bouton
                                                    g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                                                    g_signal_connect(G_OBJECT(BoutonGen), "clicked", G_CALLBACK(TraitementBoutonGen), NULL);
                                        
                                                //*************************************************************
                                                //Bouton de fermeture du programme
                                                //*************************************************************
                                                    //Création du bouton
                                                    BoutonClose = gtk_button_new_with_label("Fermer");
                                        
                                                    //Création de la box pour contenir l'alignement du bouton
                                                    boxClose = gtk_vbox_new(TRUE, 1);
                                        
                                                    //Création de l'alignement du bouton
                                                    alignementClose = gtk_alignment_new(0, 0.5, 0.5, 0);
                                        
                                                    //Hiérarchie des composants graphiques
                                                    gtk_container_add (GTK_CONTAINER(alignementClose), BoutonClose);
                                                    gtk_container_add (GTK_CONTAINER (boxClose), alignementClose);
                                                    gtk_table_attach_defaults(GTK_TABLE(table), boxClose, 5, 6, 7, 8);
                                        
                                                    //Ecoute du bouton
                                                    g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
                                                    g_signal_connect(G_OBJECT(BoutonClose), "clicked", G_CALLBACK(TraitementBoutonClose), FenetrePrincipale);
                                        
                                                //***************************************************
                                                //Ajout des composants dans la fenêtre et affichage
                                                //***************************************************
                                                    gtk_container_add(GTK_CONTAINER(FenetrePrincipale),frame);
                                                    gtk_widget_show_all(FenetrePrincipale);
                                        
                                            gtk_main();
                                            return EXIT_SUCCESS;
                                        }
                                        
                                        //****************************************************************************
                                        //Traitement du bouton "Parcourir" du fichier de connections
                                        //****************************************************************************
                                        void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil)
                                        {
                                            //Glossaire des widgets graphiques de TraitementBoutonFil
                                                GtkWidget* FenetreSelection;
                                                GtkWidget* FenetreParent;
                                        
                                            //Creation de la fenetre de selection
                                            FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN,
                                                                                            "Ouvrir", GTK_RESPONSE_OK,
                                                                                            "Annuler", GTK_RESPONSE_CANCEL, NULL);
                                            //On limite les actions a cette fenetre
                                            gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE);
                                        
                                            //Affichage de la fenetre
                                            switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))
                                            {
                                                case GTK_RESPONSE_OK:
                                                    //Recuperation du chemin
                                                    cheminFichierFil = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));
                                                    gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil);
                                                break;
                                                default:
                                                    //[aucune instruction]
                                                break;
                                            }
                                            gtk_widget_destroy(FenetreSelection);
                                        }
                                        
                                        //****************************************************************************
                                        //Traitement du bouton "Parcourir" du fichier de définition des connecteurs
                                        //****************************************************************************
                                        void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf)
                                        {
                                            //Glossaire des widgets graphiques de TraitementBoutonPrf
                                                GtkWidget* FenetreSelection;
                                                GtkWidget* FenetreParent;
                                        
                                            //Creation de la fenetre de selection
                                            FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN,
                                                                                            "Ouvrir", GTK_RESPONSE_OK,
                                                                                            "Annuler", GTK_RESPONSE_CANCEL,NULL);
                                            //On limite les actions a cette fenetre
                                            gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE);
                                        
                                            //Affichage de la fenetre
                                            switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))
                                            {
                                                case GTK_RESPONSE_OK:
                                                    //Recuperation du chemin
                                                    cheminFichierPrf = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));
                                                    gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf);
                                                break;
                                                default:
                                                    //[aucune instruction]
                                                break;
                                            }
                                            gtk_widget_destroy(FenetreSelection);
                                        }
                                        
                                        //****************************************************************************
                                        //Traitement du bouton des paramètres de continuité
                                        //****************************************************************************
                                        void TraitementBoutonConti(GtkWidget* pWidget, gpointer data)
                                        {
                                            //Glossaire des widgets graphiques de TraitementBoutonConti
                                                GtkWidget* FenetreConti;
                                                GtkWidget* FenetreParent;
                                        
                                            //Creation de la fenetre de selection
                                            FenetreConti = gtk_dialog_new_with_buttons(
                                                  "Parametres de continuite",
                                                  GTK_WINDOW(FenetreParent),
                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
                                                  "OK", GTK_RESPONSE_OK,
                                                  "Annuler", GTK_RESPONSE_CANCEL,
                                                  NULL);
                                        
                                            //*********************************************************
                                            //interface de la denêtre des paramètres de continuité
                                            //*********************************************************
                                                //Glossaire
                                                    GtkWidget* frameConti = NULL;
                                                    GtkWidget* tableConti = NULL;
                                                    GtkWidget* LabelConti1= NULL;
                                                    GtkWidget* LabelConti2= NULL;
                                                    GtkWidget* LabelConti3= NULL;
                                                    GtkWidget* LabelConti4= NULL;
                                                    GtkWidget* LabelConti5= NULL;
                                        
                                                //mise en page des widgets
                                                    //Formalisation du texte
                                                    frameConti = gtk_frame_new ("");
                                                    tableConti = gtk_table_new(6, 3, TRUE);
                                        
                                                //labels
                                                    LabelConti1 = gtk_label_new("Resistance min :");
                                                    LabelConti2 = gtk_label_new("Resistance max :");
                                                    LabelConti3 = gtk_label_new("Courant de mesure :");
                                                    LabelConti4 = gtk_label_new("Tension max :");
                                                    LabelConti5 = gtk_label_new("Temps d'application :");
                                        
                                                //entrys
                                                    EntryConti1 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryConti1), continuite.Conti1);
                                        
                                                    EntryConti2 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryConti2), continuite.Conti2);
                                        
                                                    EntryConti3 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryConti3), continuite.Conti3);
                                        
                                                    EntryConti4 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryConti4), continuite.Conti4);
                                        
                                                    EntryConti5 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryConti5), continuite.Conti5);
                                        
                                                //Placement des éléments dans le tableau
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti1, 0, 2, 0, 1);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti1, 2, 3, 0, 1);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti2, 0, 2, 1, 2);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti2, 2, 3, 1, 2);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti3, 0, 2, 2, 3);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti3, 2, 3, 2, 3);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti4, 0, 2, 3, 4);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti4, 2, 3, 3, 4);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti5, 0, 2, 4, 5);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti5, 2, 3, 4, 5);
                                        
                                                //Hiérarchie des composants graphiques
                                                    gtk_container_add(GTK_CONTAINER (frameConti), tableConti);
                                                    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreConti)->vbox),frameConti);
                                                    gtk_widget_show_all(FenetreConti);
                                        
                                            //Affichage de la fenetre
                                            switch(gtk_dialog_run(GTK_DIALOG(FenetreConti)))
                                            {
                                                case GTK_RESPONSE_OK:
                                                    continuite.Conti1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti1)),-1, NULL, NULL, NULL);
                                                    continuite.Conti2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti2)),-1, NULL, NULL, NULL);
                                                    continuite.Conti3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti3)),-1, NULL, NULL, NULL);
                                                    continuite.Conti4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti4)),-1, NULL, NULL, NULL);
                                                    continuite.Conti5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti5)),-1, NULL, NULL, NULL);
                                                break;
                                                default:
                                                    continuite.Conti1 = "default";
                                                    continuite.Conti2 = "default";
                                                    continuite.Conti3 = "default";
                                                    continuite.Conti4 = "default";
                                                    continuite.Conti5 = "default";
                                        
                                                break;
                                            }
                                            gtk_widget_destroy(FenetreConti);
                                        }
                                        
                                        //****************************************************************************
                                        //Traitement du bouton des paramètres d'isolement
                                        //****************************************************************************
                                        void TraitementBoutonIso(GtkWidget* pWidget, gpointer data)
                                        {
                                            //Glossaire des widgets graphiques de TraitementBoutonIso
                                                GtkWidget* FenetreIso;
                                                GtkWidget* FenetreParent;
                                        
                                            //Creation de la fenetre de selection
                                            FenetreIso = gtk_dialog_new_with_buttons(
                                                  "Parametres d'isolement",
                                                  GTK_WINDOW(FenetreParent),
                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
                                                  "OK", GTK_RESPONSE_OK,
                                                  "Annuler", GTK_RESPONSE_CANCEL,
                                                  NULL);
                                        
                                            //*********************************************************
                                            //interface de la denêtre des paramètres d'isolement
                                            //*********************************************************
                                                //Glossaire
                                                    GtkWidget* frameIso = NULL;
                                                    GtkWidget* tableIso = NULL;
                                                    GtkWidget* LabelIso1= NULL;
                                                    GtkWidget* LabelIso2= NULL;
                                                    GtkWidget* LabelIso3= NULL;
                                                    GtkWidget* LabelIso4= NULL;
                                                    GtkWidget* LabelIso5= NULL;
                                        
                                                //mise en page des widgets
                                                    //Formalisation du texte
                                                    frameIso = gtk_frame_new ("");
                                                    tableIso = gtk_table_new(6, 3, TRUE);
                                        
                                                //labels
                                                    LabelIso1 = gtk_label_new("Resistance min :");
                                                    LabelIso2 = gtk_label_new("Tension d'isolement :");
                                                    LabelIso3 = gtk_label_new("Courant de claquage :");
                                                    LabelIso4 = gtk_label_new("Temps de montee :");
                                                    LabelIso5 = gtk_label_new("Temps d'application :");
                                        
                                                //entrys
                                                    EntryIso1 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryIso1), isolement.Iso1);
                                        
                                                    EntryIso2 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryIso2), isolement.Iso2);
                                        
                                                    EntryIso3 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryIso3), isolement.Iso3);
                                        
                                                    EntryIso4 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryIso4), isolement.Iso4);
                                        
                                                    EntryIso5 = gtk_entry_new();
                                                    gtk_entry_set_text(GTK_ENTRY(EntryIso5), isolement.Iso5);
                                        
                                                //Placement des éléments dans le tableau
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso1, 0, 2, 0, 1);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso1, 2, 3, 0, 1);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso2, 0, 2, 1, 2);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso2, 2, 3, 1, 2);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso3, 0, 2, 2, 3);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso3, 2, 3, 2, 3);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso4, 0, 2, 3, 4);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso4, 2, 3, 3, 4);
                                        
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso5, 0, 2, 4, 5);
                                                    gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso5, 2, 3, 4, 5);
                                        
                                                //Hiérarchie des composants graphiques
                                                    gtk_container_add(GTK_CONTAINER (frameIso), tableIso);
                                                    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreIso)->vbox),frameIso);
                                                    gtk_widget_show_all(FenetreIso);
                                        
                                            //Affichage de la fenetre
                                            switch(gtk_dialog_run(GTK_DIALOG(FenetreIso)))
                                            {
                                                case GTK_RESPONSE_OK:
                                                    isolement.Iso1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso1)),-1, NULL, NULL, NULL);
                                                    isolement.Iso2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso2)),-1, NULL, NULL, NULL);
                                                    isolement.Iso3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso3)),-1, NULL, NULL, NULL);
                                                    isolement.Iso4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso4)),-1, NULL, NULL, NULL);
                                                    isolement.Iso5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso5)),-1, NULL, NULL, NULL);
                                                break;
                                                default:
                                                    isolement.Iso1 = "default";
                                                    isolement.Iso2 = "default";
                                                    isolement.Iso3 = "default";
                                                    isolement.Iso4 = "default";
                                                    isolement.Iso5 = "default";
                                        
                                                break;
                                            }
                                            gtk_widget_destroy(FenetreIso);
                                        }
                                        
                                        
                                        void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale)
                                        {
                                            gtk_widget_destroy(FenetrePrincipale);
                                        }
                                        
                                        
                                        
                                        • 1
                                        • 2