Problème header

Résolu
cap'tain sheeps -  
 le père -
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

  • 1
  • 2
  1. Vicking54 Messages postés 95 Statut Membre 26
     
    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
    0
  2. cap'tain sheeps
     
    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);
    }
    
    
    
    0
  3. le père
     
    Bonjour

    Moi non plus, je ne vois pas de
    extern gchar* cheminFichierFil;
    dans ton generateur.h
    0
  4. Vicking54 Messages postés 95 Statut Membre 26
     
    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;
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cap'tain sheeps
     
    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.
    0
  7. cap'tain sheeps
     
    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;)
    0
  8. le père
     
    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; ?
    0
  9. cap'tain sheeps
     
    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.
    0
  10. le père
     
    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.
    0
  11. cap'tain sheeps
     
    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
    
    
    
    0
  12. le père
     
    Bonjour

    J'ai essayé 10 fois hier, ça me disait ok, mais ensuite le message n'apparaissait pas dans le forum.
    0
  13. le père
     
    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 ?
    0
  14. cap'tain sheeps
     
    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.
    0
  15. le père
     
    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.
    0
  16. cap'tain sheeps
     
    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é ...
    0
  17. le père
     
    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.
    0
  18. cap'tain sheeps
     
    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
    
    
    
    
    0
  19. cap'tain sheeps
     
    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;
    }
    
    
    0
  20. cap'tain sheeps
     
    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);
    }
    
    
    
    0
  • 1
  • 2